home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs49.d81
/
hack8a.sfx
/
issue8a
Wrap
Text File
|
1990-02-12
|
100KB
|
2,286 lines
########
##################
###### ######
#####
##### #### #### ## ##### #### #### #### #### #### #####
##### ## ## #### ## ## ## ### ## #### ## ## ##
##### ######## ## ## ## ##### ## ## ## ## ##
##### ## ## ######## ## ## ## ### ## ## #### ## ##
##### #### #### #### #### ##### #### #### #### #### #### ######
##### ##
###### ###### ╔SSUE #8
################## ┴UG. '94
########
----------------------------------------------------------------------(V1.2)--
┼DITOR'S ╬OTES:
BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
╫OE BE TO ├OMMODORE,
╘HE MARKETER'S HAVE FINALLY KILLED IT,
╫ITH A LITTLE BIT OF SPENDING HERE,
┴ND NOT MUCH OVER THERE,
┘OU KNOW THAT ├OMMODORE HAS FINALLY DIED.
┴ND THAT'S THE WAY LIFE SHOULD BE,
╘HE ├OMMODORE FANATICS CRIED.
╫E'LL PROBABLY BE BETTER OFF THEY YELL,
╠ET ├OMMODORE GO TO HELL.
╙O THE QUESTION IS WHO'LL PURCHASE ├OMMODORE?
┘ES, FOR THOSE OF YOU WHO ARE UNAWARE ├OMMODORE HAS DECLARED BANKRUPTCY.
╘HERE ARE NUMEROUS RUMOURS ABOUND OVER WHOSE INTERESTED IN WHAT DIVISIONS OF
├OMMODORE AND SUCH - THERE'S STILL NO DEFINATE WORD ON THE NET. ╙EVERAL
FACTORS CAN BE BLAMED FOR ├OMMODORE'S DEMISE: ├OMMODORE _NEVER_ WAS
SUCCESSFUL IN MARKETING PRODUCTS. ╘HE ENGINEERS WOULD OFTEN TURN OUT MIRACLE
MACHINES THAT THE MARKETING DEPARTMENT (╔ WONDER IF THERE EVEN WAS ONE)
PROMOTED BADLY, IF AT ALL. ╫HAT HAS PUT THE NAIL IN THE COFFIN FOR ├OMMODORE
WAS THE LACK OF FINANCIAL CAPITAL TO KEEP THE COMPANY IN OPERATION. ┴ LOT OF
THIS NEWS HAS BEEN DISCUSSED ON ╟┼NIE, THE NEWSGROUP ├OMP.╙YS.├BM, AND
VARIOUS MAGAZINES AS WELL SO ╔ WON'T ELABORATE ANY FURTHER.
╙PEAKING OF MAGAZINES, ├REATIVE ═ICRO ─ESIGNS HAS STARTED A MAGAZINE FOR
├OMMODORE 8-BIT'S CALLED, "├OMMODORE ╫ORLD". ╘HE MAGAZINE IS VERY WELL DONE.
╘HERE ARE OTHER MAGAZINES THAT ALSO DESERVE MENTION: ─IE╚ARD, THE ╒NDERGROUND
AND MANY OTHERS. ├OMMODORE MAY BE BANKRUPT BUT THE ├OMMODORE WILL STILL LIVE
FOREVER.
╙PEAKING OF LIVING FOREVER, ├OMMODORE ╚ACKING IS LOOKING FOR ARTICLES ON ANY
SUBJECT DEALING WITH ANY ASPECT OF TECHNICAL PROGRAMMING OR HARDWARE ON THE
├OMMODORE. ╔F YOU'VE GOT AN ARTICLE ALREADY WRITTEN, OR AN IDEA FOR ONE
_PLEASE_ FEEL FREE TO E-MAIL ME VIA DUCK@PEMBVAX1.PEMBROKE.EDU. ═ANY THANKS
TO THE AUTHORS WHOSE WORKS MAKE UP THIS AND PREVIOUS ISSUES.
=============================================================================
╨LEASE NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS
╞╘╨ FROM CCNGA.UWATERLOO.CA (AMONG OTHERS) UNDER PUB/CBM/HACKING.MAG
AND VIA A MAILSERVER WHICH DOCUMENTATION CAN BE OBTAINED BY SENDING
MAIL TO "DUCK@PEMBVAX1.PEMBROKE.EDU" WITH A SUBJECT LINE OF
"MAILSERVER" AND THE LINES OF "HELP" AND "CATALOG" IN THE BODY OF THE
MESSAGE.
=============================================================================
╬╧╘╔├┼: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN
WHOLE, FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL
AUTHORS FOR PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
┴ CHARGE OF NO GREATER THAN 5 ╒╙ DOLLARS OR EQUIVLENT MAY BE CHARGED
FOR LIBRARY SERVICE / DISKETTE COSTS FOR THIS "NET-MAGAZINE".
=============================================================================
╔N ╘HIS ╔SSUE:
├OMMODORE ╘RIVIA ├ORNER
╘HIS SECTION OF ├=╚ACKING CONTAINS QUESTIONS THAT TEST YOUR KNWOLEDGE OF
TRICKS AND LITTLE KNOWN-INFORMATION FOR THE ├OMMODORE COMPUTERS. ┼ACH ISSUE
THEY'LL BE ANSWERS TO THE PREVIOUS ISSUES QUESTIONS AND NEW QUESTIONS. ╚OW
MUCH DO YOU KNOW?
╥╙232 ├ONVERTER
╘HIS ARTICLE, WITH A MINIMUM OF PARTS, DETAILS HOW TO MAKE YOUR OWN ╥╙-232
CONVERTER.
╨ROGRAMMING THE ├OMMODORE ╥┴═ ┼XPANSION ╒NITS (╥┼╒S)
╘HE ╥┼├ CHIP IS A ─═┴ (DIRECT MEMORY ACCESS) CHIP THAT ALLOWS FOR THE
├OMMODORE 64 AND 128 TO USE THE ╥AM ┼XPANSION ╒NITS. ╘HIS ARTICLE EXAMINES
HOW TO ACCESS THE CHIP IN YOUR OWN ═╠ PROGRAMS.
┴ ─IFFERENT ╨ERSPECTIVE: ╘HREE-─IMENSIONAL ╟RAPHICS ON THE ├64
╔N THIS ARTICLE, CO-WRITTEN BY ╙TEPHEN ╩UDD AND ╟EORGE ╘AYLOR, IS
PRESENTED ALL THE BASIC GRAPHICS TOOLS AND MATHEMATICAL THEORY BEHIND
3D GRAPHICS. ╘HE BASIC TOOLS ARE USING A CHARSET TO MAKE GRAPHICS,
PLOTTING A POINT, DRAWING A LINE, CLEARING THE GRAPHICS, AND DOUBLE
BUFFERING. ╘HE 3D TOOLS ARE DEFINING A 3D OBJECT, ROTATION OF THE
OBJECT IN 3D SPACE, AND PERSPECTIVE VIEWING ON A 2D SCREEN.
╨ROGRAMS ARE PRESENTED IN BASIC 2.0, BASIC 7.0, AND ASSEMBLY WHICH
SHOW A ROTATING CUBE OUTLINE.
─ESIGN OF A '╥EAL' ╧PERATING ╙YSTEM FOR THE 128: ╨ART ╔
╫RITTEN ├RAIG ┬RUCE THIS ARTICLE EXAMINES A 'REAL' OPERATING SYSTEM FOR THE
├OMMDORE 128. ╔T FOCUSES ON THE ╧╙ BEING ═ULTI-TASKING, ─ISTRIBUTED AND BASED
ON A ═ICRO╦ERNAL. ╫HY? ┴S HE STATES, "┬ECAUSE ╔'M DESIGNING IT, AND THAT'S
WHAT INTERESTS ME. ╘HE EASE-OF-CONSTRUCTION THING IS IMPORTANT TOO. ┴NOTHER
IMPORTANT QUESTION IS 'CAN IT BE DONE?'. ╘HE ANSWER IS 'YES.' ┴ND IT WILL
BE DONE, WHENEVER ╔ GET AROUND TO IT (ONE OF THESE LIFETIMES)."
=============================================================================
├OMMODORE ╘RIVIA ├ORNER
BY ╩IM ┬RAIN (BRAIN@MAIL.MSEN.COM)
╔T IS TIME FOR ANOTHER DOSE OF TRIVIA! ┴S SOME OF YOU MAY KNOW, ╘HE
├OMMODORE ╘RIVIA ┼DITIONS ARE POSTED EVERY MONTH TO THE ╒╙┼╬┼╘ NEWSGROUPS
COMP.SYS.CBM, ALT.FOLKLORE.COMPUTERS, AND COMP.SYS.AMIGA.ADVOCACY. ╘HIS
ARTICLE IS A COMPILATION ╘RIVIA ┼DITIONS 2-8, WITH ONLY THE QUESTIONS
APPEARING FOR ┼DITION 8. ╘HESE ARE PART OF A ╘RIVIA ├ONTEST IN WHICH
ANYONE MAY ENTER. ╔F YOU WISH TO PARTICIPATE IN THE NEWEST
╘RIVIA CONTEST (╫HICH IS ON ╘RIVIA 8 AS ╔ WRITE THIS), PLEASE SEND YOUR
ANSWERS TO ME AT 'BRAIN@MAIL.MSEN.COM'.
╘HE FOLLOWING ARTICLE CONTAINS THE ANSWERS TO THE ╩ANUARY EDITION OF TRIVIA
($00┴ - $01╞), THE QUESTIONS AND ANSWERS FOR ╞EBRARY ($020 - $02╞), ═ARCH
($030 - $03╞), ┴PRIL ($040 - $04╞), ═AY ($050 - $05╞), ╩UNE ($060 - $06╞),
AND THE QUESTIONS FOR THE ╩ULY EDITION ($070 - $07╞). ┼NJOY THEM!
╚ERE ARE THE ANSWERS TO THE ├OMMODORE TRIVIA QUESTIONS FOR ╩ANUARY, 1994.
╤ $00┴) ╫HAT WAS THE ├ODE-╬AME OF THE ┴MIGA WHILE IN ─EVELOPMENT?
┴ $00┴) ╠ORRAINE. ┴MIGA WAS THE COMPANY NAME. ╫HEN ├OMMODORE BOUGHT THE
COMPANY, THEY SCRAPPED THE MODEL NAME AND USED THE OLD COMPANY NAME.
╤ $00┬) ╫HAT IS ╠ORD ┬RITISH'S ╥EAL ╬AME (╘HE CREATOR OF THE ╒LTIMA
╙ERIES)?
┴ $00┬) ╥ICHARD ╟ARRIOTT. ╙COTT ╙TATTON HAS MET HIM AND SAYS THAT HE IS SON
OF ASTRONAUT ╧WEN ╟ARRIOTT.
╤ $00├) ╫HAT IS THE ╨╧╦┼ LOCATION AND VALUE THAT WILL FRY AN EARLY MODEL
╨┼╘?
┴ $00├) 59458. ╔T IS IN THE (╓ERSATILE ╔NTERFACE ┴DAPTER, 6522)
╬O, ╔ WON'T TELL YOU WHAT TO POKE INTO IT, BUT ╔ WILL TELL YOU
THAT IT IS NOT THE ONLY WAY TO FRY A ╨┼╘. HERE IS A DESCRIPTION FROM
NONE OTHER THAN ╩IM ┬UTTERFIELD
"╘HE POKE SHOPWN ABOVE IS CORRECT. ╔TS INTENTION WAS TO SPEED UP EARLY
MODEL ╨┼╘S BY MASKING THE ╥┼╘╥┴├┼ LINE (BY SWITCHING IT TO OUTPUT)...
HOWEVER, ├OMMODORE SUBSEQUENTLY ╥┼─┼╙╔╟╬┼─ THE INTERFACE IN SUCH A WAY
THAT MAKING THE ╓╔┴ PIN AN OUTPUT CAUSED (NOW) TWO OUTPUTS TO FIGHT
EACH OTHER ... RESULT, ╓╔┴ AND/OR VIDEO CIRCUITRY BURNT OUT.
╠┴╘┼╥ (─AYS OF "FAT 40" AND 80-COLUMN ╨┼╘S), THE NEW ├╥╘ CONTROLLER
CHIP COULD BE FIDDLED WITH ╨╧╦┼╙ SO THAT IT GENERATED SCAN RATES
COMPLETELY OUT OF THE CAPACITY OF THE ├╥╘ DEFLECTION CIRCUITS.
╥ESULT: BURNT OUT DEFLECTION CIRCUITRY ... AND THAT WAS NO ┘╧╦┼!"
╥ICHARD ┬RADLEY SAYS THAT 59595 IS THE SECOND POKE THAT ╩IM IS
REFERRING TO.
╔ ALSO HAVE IN ON WORD FROM ┼THAN ─ICKS THAT 59409 IS ANOTHER
INFAMOUS POKE, BUT ╔ WOULDN'T TRY ANY OF THESE!
╤ $00─) ╧N THE ╨LUS 4 AND ├-16, THE ╓╔├ CHIP WAS REPLACED WITH THE ╘┼─
CHIP. ╫HAT DOES ╘┼─ STAND FOR?
┴ $00─) ╘┼─ = ╘EXT ┼DITING ─EVICE. ╔T DID NOT HAVE AS MANY CAPABILITIES
AS THE ╓╔├ ╔╔.
╤ $00┼) ├OMMODORE ╨RODUCED A DAISY-WHEEL LETTER QUALITY PRINTER IN ╬ORTH
┴MERICA (MAYBE ELSEWHERE) FOR THE ├OMMODORE ╙ERIAL ╠INE. ╬AME IT.
┴ $00┼) ╘HE ├OMMODORE ─╨╙ 1101. ╘HE ├┬═ 6400 WAS ANOTHER EARLIER ATTEMPT
AT A DAISY-WHEEL PRINTER, BUT IT HAD AN ╔┼┼┼-488 INTERFACE.
╤ $00╞) ╫HAT IS THE VERSION OF ─╧╙ IN THE 1541?
┴ $00╞) 2.6
╤ $010) ╫HAT IS THE ╓ERSION OF ┬┴╙╔├ IN THE ╨LUS 4 AND THE ├-16?
┴ $010) 3.5.
╤ $011) ╫HAT ARE THE NICKNAMES OF THE ORIGINAL THREE CUSTOM ┴MIGA CHIPS?
┴ $011) ─APHNE/─ENISE, ┴GNES/┴GNUS, AND ╨AULA/╨ORTIA, OR ╚UEY, ─UEY, AND ╠OUIE.
─ENISE, ┴GNES, AND ╨AULA WERE THE ┴MERICAN NAMES, BUT THE THE OTHERS
CREPT IN FROM SOMWHERE. THE DUCKS WERE ALWAYS A JOKE, BUT CAUGHT ON
AS ALTERNATE NAMES.
╤ $012) ├OMMODORE PRODUCED A 64 IN A ╨┼╘ CASE. ╫HAT IS ITS NAME AND MODEL
NUMBER?
┴ $012) ╘HE ┼DUCATOR 64. ╔T WAS MODEL NUMBER ├┬═ 4064, AND IT WAS ALSO CALLED
THE ╨┼╘64. ╬OTE THAT THIS VERSION OF THE 64 WAS THE SECOND ATTEMPT.
├OMMODORE FIRST TRIED TO SELL THE "┼DUCATOR 64" TO SCHOOLS IN THE
REGULAR 64 CASE, BUT ADMINISTRATORS AND TEACHERS DISLIKED THE "HOMEY"
LOOK. ╘HUS, IT WAS SQUEEZED INTO A ╨┼╘ CASE AND SOLD BETTER, ALTHOUGH
╔ DON'T THINK IT WAS EVER A KILLER SELLER.
╤ $013) ├OMMODORE SOLD A 1 MEGABYTE FLOPPY DISK DRIVE IN A 1541 CASE.
╟IVE THE MODEL NUMBER.
┴ $013) ╘HE ├OMMODORE ╙╞─ 1001. ╔T WAS ACTUALLY HALF OF AN ├┬═ 8250 ╠╨
WITH A SLIGHTLY REVISED ╥╧═.
╤ $014) ╫HAT DOES ╟├╥ STAND FOR?
┴ $014) ╟ROUP ├ODE ╥ECORDING.
╤ $015) ├OMMODORE PRODUCED A DRIVE TO ACCOMPANY THE ╨LUS 4 INTRODUCTION THAT
WAS DESIGNED SPECIFICALLY FOR THE ╨LUS/4. ╟IVE THE MODEL NUMBER.
┴ $015) THE ├┬═ 1551 WAS THE NEW, HIGH-PERFORMANCE DRIVE THAT WAS DESIGNED
SPECIFICALLY FOR THE ├OMMODORE ╨LUS/4 AND ├-16. ╘HE 1542 WAS
ACTUALLY JUST A REPACKAGED 1541 IN A GREY CASE THAT WAS MADE AVAILABLE
FOR PEOPLE WHO DIDN'T WANT TO SPEND THE EXTRA MONEY FOR THE 1551. ╘HE
EXTRA COST RESULTED FROM THE 1551 SPORTING A NEW, PARALLEL TRANSFER
METHOD THAT INCREASED TRANSFER RATES 400%.
╤ $016) ╫HAT DOES ╙╔─ STAND FOR?
┴ $016) ╙╔─ = ╙OUND ╔NTERFACE ─EVICE
╤ $017) ╫HAT DOES THE ACRONYM ╦┼╥╬┴╠ STAND FOR?
┴ $017) ╦┼╥╬┴╠ = ╦EYBOARD ┼NTRY ╥EAD, ╬ETWORK, ┴ND ╠INK. ╘HIS IS MOST LIKELY
ANOTHER "WORDS AFTER THE LETTERS" ACRONYM, ALONG THE LINES OF THE
╨┼╘ ACRONYM.
╤ $018) ╫HAT VERSION OF ─╧╙ DOES THE 1571 HAVE?
┴ $018) 3.0
╤ $019) ╫HAT OTHER TWO ├OMMDORE ─ISK ─RIVES SHARE THE SAME ─╧╙ VERSION
NUMBER AS THE 1571?
┴ $019) ╔ GOT MORE THAN ╔ BARGAINED FOR ON THIS QUESTION, SINCE THERE
ARE FOUR DRIVES WHICH HAVE THE SAME ─╧╙ VERSION THAT ╔ FEEL ARE
ADEQUATE RESPONSES TO THIS QUESTION.
╘HE ├┬═ ─9060 AND ─9090, ALTHOUGH ╔ DOUBT THE CODE IS THE SAME.
╘HE ─ SERIES WERE HARD DRIVES.
╘HE 8280 ─UAL 8" ╞LOPPY ─RIVE.
╘HE 1570, WHICH WAS A SINGLE SIDED VERSION OF THE 1571 IN A 1541
CASE PAINTED TO MATCH THE 128. ╘HE ╥╧═ IS SLIGHTLY DIFFERENT,
ENOUGH TO MAKE IT UNRECOGNIZABLE AS EITHER A 1541 OR A 1571 IN SOME
CASES.
╘HE 1571╔╔ AND THE 1571─, WHICH IS THE DRIVE IN THE ├128─, ALSO
HAVE THIS ─╧╙ REVISION, BUT THAT STANDS TO REASON, SINCE THEY ARE
IN THE 1571 LINE.
╤ $01┴) ╚OW MANY FILES WILL THE 1571 HOLD?
┴ $01┴) 144 IN BOTH MODES. ╔ AM SURPRISED ├OMMODORE DIDN'T ADD A TRACK OR
PUT ANOTHER DIRECTORY ON THE BACK.
╤ $01┬) ╚OW MANY FILES WILL THE 1541 HOLD?
┴ $01┬) 144.
╤ $01├) ╫HAT DID ├OMMODORE MAKE RIGHT BEFORE ENTERING THE COMPUTER MARKET?
┴ $01├) ├ALCULATORS. ╘HEY ALSO MADE OFFICE EQUIPMENT, WATCHES, ADDING
MACHINES, AND THERMOSTATS, HENCE THE NAME "├OMMODORE ┬USINESS
═ACHINES".
╤ $01─) ├OMMODORE INTRODUCED AN ILL-FATED 4 COLOR PLOTTER. ╟IVE THE MODEL
NUMBER.
┴ $01─) THE ├OMMODORE 1520. ╔T USED 4 INCH WIDE PAPER AND COULD USE 4
COLORS.
╤ $01┼) ╙OME FORMATS OF ├╨/═ WRITE DISKS USING THE ═╞═ FORMAT. ╫HAT DOES
═╞═ STAND FOR?
┴ $01┼) ═╞═ = ═ODIFIED ╞REQUENCY ═ODULATION
╤ $01╞) ╧N THE ├OMMDORE 128, THE USER MANUAL LEFT THREE COMMANDS UNDOCUMENTED.
╧NE WORKS, AND THE OTHER GIVES A NOT-IMPLEMENTED ERROR. ╬AME THE
COMMANDS AND WHAT EACH ONE DOES OR DOES NOT DO.
┴ $01╞) ╥╥┼╟ READS THE INTERNAL REGISTERS AFTER A ╙┘╙ COMMAND.
╧╞╞ GIVES AN UNIMPLEMENTED COMMAND ERROR.
╤╒╔╘ DOES TOO.
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #3 FOR ╞EBRUARY, 1994.
╤ $020) ╫HAT DOES THE LETTERS ╔┼┼┼ IN ╔┼┼┼-488 STAND FOR?
┴ $020) ╔NSTITUTE OF ┼LECTRICAL AND ┼LECTRONICS ┼NGINEERS.
╤ $021) ╫HAT WAS THE LOGO OF ┬ATTERIES ╔NCLUDED?
┴ $021) ╔T WAS A THE FACE AND HANDS OF A MAN WITH GLASSES INSIDE A CIRCLE.
┼ARLY RENDITIONS OF HIM WERE IN BLACK AND WHITE, WHILE LATER ONES HAD
HIM WITH BLOND HAIR A A RED SHIRT. ╙OME VIEWS HAD HIM ACTUALLY
TYPING ON THE 64/╓╔├ WITH ONE FINGER, BUT MOST JUST SHOWED HIM,
NOT THE KEYBOARD.
╤ $022) ╘HE ├OMMODORE ╓╔├-20, 64, AND 128 COMPUTERS EMULATE IN SOFTWARE A VERY
IMPORTANT INTEGRATED CIRCUIT. ╫HAT IS ITS NUMBER, AND WHY IS IT
IMPORTANT?
┴ $022) ╘HE 6551 ╒┴╥╘ ╔├. ╔T IS USED FOR ╥╙-232 COMMUNICATIONS.
╤ $023) ├OMMODORE WATCHES PLAY A BEAUTIFUL SONG FOR THE ALARM. ╫HAT IS THE
SONG'S TITLE?
┴ $023) ╞LEUR-DE-LIS. ╘HE "╟ODFATHER" THEME.
╤ $024) ╘HE ├2╬ STYLE ├OMMODORE TAPE DECKS ARE IMPRESSIVE IN HANDLING ERRORS.
╚OW MANY TIMES IS A SINGLE PROGRAM STORED ONTO TAPE?
┴ $024) ╘WICE, SECOND COPY IS PLACED RIGHT AFTER THE FIRST. ╘HAT MEANS, EVEN
IF YOU GET A LOAD ERROR ON LOAD, YOU MIGHT BE ABLE TO JUST RUN THE
PROGRAM ANYWAY, AS A LOAD PUTS THE FIRST COPY IN MEMORY, AND VERIFIES
IT AGAINST THE SECOND COPY.
╤ $025) ╫HAT IS A JIFFY?
┴ $025) ┴ JIFFY IS 1/60TH OF A SECOND. ╔T IS THE SAME ON ╨┴╠ AND ╬╘╙├
├OMMODORE COMPUTERS.
╤ $026) ╫HAT IS THE SCREEN RESOLUTION OF THE ├OMMODORE ╓╔├-20?
┴ $026) ╧N THE ╓╔├-╔ ╔├, THE TEXT AND GRAPHICS SCREENS ARE DEFINABLE WITHIN
LIMITS. ╘HEREFORE, THERE ARE A NUMBER OF ANSWERS THAT ARE CORRECT:
╘HE DEFAULT SCREEN HAS (AND THE ANSWERS ╔ WAS LOOKING FOR):
╘EXT: 22╚ X 23╓ = 506 CHARACTERS
╟RAPHICS: 176╚ X 184╓ = 32384 PIXELS
╚OWEVER, ON EXPERIMENTATION WITH A ╬╘╙├ ╓╔├-╔ (6560), ╔ FOUND THAT
IT COULD SUPPORT A RESOLUTION OF:
╘EXT: 24╚ X 29╓ = 696 CHARACTERS
╟RAPHICS: 192╚ X 232╓ = 44544 PIXELS
┘OUR MILEAGE MAY VARY, BUT THESE NUMBERS REMOVE ALL BORDER AREA.
(╔ AM NOT SURE IF YOU CAN USE ALL THE PIXELS, SINCE THE ╓╔├-╔ ONLY
ALLOWS 32768 TO BE USED. ┘OU MIGHT BE ABLE TO FLIP THE GRAPHICS
PAGE IN THE MIDDLE OF THE SCREEN, BUT ╔ LEAVE THAT AS AN EXERCISE.)
╘HE ╓╔├-╔ ALSO SUPPORTS A VIRTUAL SCREEN, WHICH CAN BE "PANNED" SO
THAT THE PHYSICAL SCREEN BECOMES A "WINDOW" INTO THE VIRTUAL SCREEN.
╘HE MAXIMUM "SCROLLABLE" VIRTUAL SCREEN ON ╬╘╙├ IS:
╘EXT: 28╚ X 32╓? = 896 CHARACTERS
╟RAPHICS: 224╚ X 256╓? = 57344 PIXELS
╘HE ╓╔├ SUPPORTS MORE RESOLUTION THAN 32╓, BUT YOU CAN NEVER SEE
IT SINCE YOU CAN'T SCROLL IT INTO VIEW, SO THE POINT IS MOOT.
╙O, IF ╔ DIDN'T THOROUGHLY CONFUSE YOU, EMAIL ME AND ╔ WILL MAKE
SURE ╔ DO!
╤ $027) ╫HY IS THE ╓╔├-20 NAMED THE ╓├-20 IN ╟ERMANY?
┴ $027) ┬ECAUSE '╓" IS PRONOUNCED '╞" IN ╟ERMANY, AND THE RESULTING
PRONUNCIATION WAS A NAUGHTY WORD.
├OMMODORE PUT ONE OVER ON MANY PEOPLE. ╘HE ╓╔├-20 WAS DESIGNED IN
THE STATES AND GIVEN THAT NAME DUE TO THE ╔├ THAT DID THE GRAPHICS.
╫HEN THE MARKETING STARTED, ├┬═ FOUND OUT THE NAME WAS NO GOOD IN
╟ERMANY, SO THEY QUICKLY RENAMED IT ╓├-20. ╘HE AFTER-THE-FACT
╓OLKS-├OMPUTER CONJURED UP IMAGES OF THE ╓OLKSWAGON CAR (╓╫), WHICH
WAS POPULAR AT THE TIME FOR ITS DEPENDABILITY AND PRICE. ╘HE REST IS
HISTORY...
╤ $028) ╫HY WAS EARLY ├OMMODORE EQUIPMENT BUILT INTO SUCH HEAVY ENCLOSURES?
┴ $028) ╙IMPLE. ├OMMODORE MADE OFFICE FURNITURE, WHICH INCLUDES DESKS AND
FILING CABINETS. ╘HEY SIMPLY USED THE FACILITIES AND PARTS ON HAND.
╘HE FACT THAT, AT THE TIME THE ╨┼╘ CAME OUT, PEOPLE EQUATED PHYSICAL
STABILITY OF A MACHINE AS AN INDICATION OF ITS WORTH, SERVED ONLY TO
REINFORCE THE DECISION. ┴LSO, THE SYSTEM HAD TO HOLD UP THE BUILT-IN
MONITOR.
═OST PEOPLE THINK IT IS DUE TO ╞├├ REGULATIONS. ╞├├ REGULATIONS HAD
NOT BEEN DETERMINED AT THE TIME THE ╨┼╘ CAME OUT, ALTHOUGH THE
ENGINEERS DID KNOW THAT THE ├╥╘ PRODUCED MANY ELECTRICAL HAZARDS WHICH
COULD BE ALLEVIATED WITH A SHIELDED METAL CASE. ├OMMODORE HAS ALWAYS
BEEN A "CHEAP" COMPANY, SO THE FACT THAT THEY COULD GET GOOD
SHIELDING IN-HOUSE AT ALMOST NO COST PROVED TO BE THE OVERRIDING
FACTOR. ╔T MIGHT INTEREST SOME TO NOTE THAT, EVEN WITH THE METAL
CASE, EARLY ╨┼╘S HAD FOIL INSIDE AS A SECONDARY SHIELD. ╘HE REASON
HAS TO DO WITH THE KEYBOARD BEING MOSTLY PLASTIC, AS THE SHIELD FIT
DIRECTLY UNDERNEATH, BUT THE REASON FOR IT REMAINS A MYSTERY TO ME.
╤ $029) ╫HAT TWO ┬┴╙╔├ 2.0 COMMANDS MIGHT STILL WORK IF MISPELLED?
┴ $029) ╘HE ANSWERS ╔ WAS LOOKING FOR ARE ┼╬─ AND ╙╘╧╨, ALTHOUGH SOMEONE
CORRECTLY POINTED OUT THAT ╟╧ ╘╧ CAN BE CONSTRUED AS A MISPELLING.
┴LSO, PRINT#, GET#, AND INPUT# MIGHT WORK IF THE '#' WAS OMITTED AND
THE PROGRAM WAS GETTING DATA TO SCREEN OR KEYBOARD.
┴LTHOUGH THE FOLLOWING AREN'T REALLY THE RESULT OF MISPELLED COMMANDS,
╔ PUT THEM IN, SINCE YOU COULD STRETCH THE DEFINITION OF MISPELLED TO
INCLUDE THEM.
╠┼╘ WOULD WORK IF IT WAS LEFT OUT, SINCE ╠┼╘ WAS AN OPTIONAL
KEYWORD. ├OMMANDS OF THE FORM <KEYWORD> <NUMBER OR VARIABLE> WOULD
WORK IF LETTERS WERE TACKED ONTO THE END. (EXAMPLE: ╥╒╬─┘., PRG HAS
A VALID LINE 0, AND ─┘ = 0). ╞INALLY, ╠╧┴─"JIM",8,1GARBAGE WOULD
WORK DUE TO THE WAY ╠╧┴─ ABSOLUTE WORKED, BUT THAT IS A STRETCH!
╤ $02┴) ╫HAT DOES ├╔┴ STAND FOR? (NOT THE ╒.╙. ├╔┴!)
┴ $02┴) ├╔┴ = ├OMPLEX ╔NTERFACE ┴DAPTER. ╘HE GERMAN ═AGAZINE 64'ER CALLS
IT A ├ONTROL ╔NTERFACE ┴DAPTER, BUT THAT IS NOT ITS OFFICIAL
NAME.
╤ $02┬) (HARD ONE) ╫HAT IS THE KEY ╓╔├ CAPABILITY THAT MAKES FULL-SCREEN
HIRES GRAPHICS POSSIBLE ON THE _╓╔├-20_?
┴ $02┬) ┴ LOT OF PEOPLE ANSWERED REDEFINABLE CHARACTERS, BUT THAT ALONE DOES
NOT PROVIDE ╞╒╠╠-╙├╥┼┼╬ GRAPHICS. 256 8*8 CELLS GIVES YOU A LITTLE
OVER 1/2 OF THE SCREEN IN GRAPHICS, BUT THE ╓╔├ HAS THE ABILITY TO
MAKE EACH CHARACTER CELL BE 8*16, WHICH GIVES ENOUGH PIXELS TO MAP
THE ENTIRE DEFAULT SCREEN.
╤ $02├) ╚OW MANY CASSETTE PORTS DOES THE ├┬═ 8032 COMPUTER HAVE?
┴ $02├) ╘WO. ╧NE ON BACK, ONE ON SIDE NEAR THE BACK.
╤ $02─) ╫HAT 5 BYTES MUST APPEAR IN EVERY ├OMMODORE 64 AUTOSTART CARTRDGE AND
WHAT LOCATION IN MEMORY MUST THEY BE PLACED AT?
┴ $02─) ├┬═80 AT $8004. ╘HE LETTERS MUST HAVE BIT 7 SET. ╙O, THE ACTUAL
╨┼╘╙├╔╔ CODES ARE 195, 194, 205, 056, 048.
$C3, $C2, $CD, $30, $30 IN ╚┼╪
╤ $02┼) ╫HAT IS THE CORRECT ├OMMODORE TECHNICAL TERM FOR "╙PRITES"?
┴ $02┼) ═╧┬S, OR ═OVABLE ╧BJECT ┬LOCKS.
╤ $02╞) (╘HREE PARTER, ALL PARTS MUST BE CORRECT) "╨USH-WRAP-CRASH" IS A
NICKNAME FOR A CONDITION THAT CAN LOCK UP AN OLD-STYLE ├=64.
╫HAT CAUSES IT?
╚OW CAN IT BE AVOIDED (BESIDES NOT DOING IT)?
╫HAT IS THE ONLY WAY OUT ONCE IT HAS OCCURED (BESIDES REBOOTING)?
┴ $02╞) ╫OW, ╔ GOT SO MANY RESPONSES TO THIS! ╘HIS QUESTION ACTUALLY
DEALT WITH A TYPICAL USER, BUT PEOPLE SENT IN DESCRIPTIONS OF
WHAT THE CODE DOES AND HOW TO PATCH IT. ╙O, THERE ARE TWO SETS
OF ANSWERS TO THIS:
╒SER ┴NSWER:
1) ╔F YOU PUT THE CURSOR AT THE BOTTOM OF THE SCREEN AND TYPE 82 CHARACTERS
(NOT 81) AND THEN TRYING TO DELETE BACK TO THE 78TH ONE.
2) ┴NY OF THE FOLLOWING WILL WORK:
─O NOT USE THE FOLLOWING COLORS FOR THE CURSOR: RED, BLUE, YELLOW,
LIGHT RED, DARK GREY, LIGHT BLUE, LIGHT GRAY.
╙OME PEOPLE DEVISED A ╔╥╤ WEDGE THAT WILL RECOVER FROM THE LOCKUP.
╚AVE THE FOLLOWING LINES AS THE FIRST LINES OF A PROGRAM:
10 OPEN 15,8,15 20 INPUT#15,A$.
3) ╘HERE ARE ACTUALLY TWO WAYS TO RECOVER. ╘HEY ARE:
╔F YOU HAVE A RESET BUTTON INSTALLED ON THE 64, RESET THE MACHINE,
THEN LOAD AND RUN AN UNNEW PROGRAM. (╔ ACCEPTED THIS, BUT ╔ FIGURED
MOST PEOPLE WOULD ASSUME THIS MUCH)
╔F YOU HAVE A TAPE DRIVE INSTALLED, PRESS EITHER ╙HIFT-3 OR MOVE A
JOYSTICK INSTALLED IN ╨ORT 1 IN THE ╒╨ DIRECTION. ╘HEN, RESPOND TO
THE DIRECTIONS ON THE SCREEN "╨╥┼╙╙ ╨╠┴┘ ╧╬ ╘┴╨┼". ╬EXT, PRESS
╥╒╬-╙╘╧╨ TO STOP THE TAPE LOAD.
╫HAT REALLY HAPPENS: (╔ CAN'T PROVE THIS)
1) ╘HE USER TYPES THE LINE OF TEXT AND THE SCROLL CODE IS INVOKED.
╘HE FIRST TWO LINES BECOME LINKED AS ONE LOGICAL LINE, AND THE
THIRD LINE IS TREATED AS A NEW LINE.
╘HE USER DELETES THE 82ND AND THE 81ST CHARACTER AND THEN HITS DELETE
WHILE IN THE FIRST COLUMN OF THE THIRD LINE. ╙INCE THE DELETE WILL PUT
THE CURSOR BACK UP INTO THE SECOND LINE, WHICH IS LINKED WITH THE FIRST,
THE ╦┼╥╬┴╠ GETS CONFUSED AND THINKS THE SECOND LINE IS AT THE BOTTOM OF
THE SCREEN. ╥EMEMBER, THE "CURSOR" IS ACTUALLY CONSTRUCTED BY A
COMBINATIONS OF USING REVERSE CHARACTERS AND CHANGING THE COLOR ╥┴═
NYBBLE FOR THAT SCREEN LOCATION. ╘HUS, WHEN THE CURSOR GETS "ERASED"
FROM THE FIRST COLUMN OF THE LAST LINE, THE ╦┼╥╬┴╠ THINKS THE COLOR
NYBLE FOR IT IS AT $─├00, WHICH IS 40 BYTES OFF FROM THE ACTUAL
POSITION. $─├00 IS ACTUALLY ╨ORT ┴ FOR ├╔┴ #1, WHICH IS WHERE THE
KERNAL WRITES THE COLUMN OF THE KEYBOARD IT WISHES TO SCAN. ┬ECAUSE THE
╦┼╥╬┴L IS MESSED UP, IT PUTS THE COLOR NYBBLE FOR WHERE IT THINKS THE
CURSOR WAS INTO THIS LOCATION. (╘HAT IS WHY THERE IS A CONNECTION
BETWEEN CURSOR COLOR AND THIS BUG.
╬OW, THE SYSTEM INTEGRITY HAS BEEN COMPROMISED, BUT IT DOES NOT SHOW
YET. ╘HE USER PROCEEDS TO DELETE THE 80TH CHARACTER. ┴S THE USER
DELETES THE 79TH CHARACTER, THE BAD VALUE IN $─├00 GOES TO WORK AND
FOOLS THE ╦┼╥╬┴L INTO THINKING ╙╚╔╞╘/╥╒╬-╙╘╧╨ HAS BEEN PRESSED. ╔T ALSO
PRETTY MUCH DISABLES THE KEYBOARD.
2) ╙INCE THE ├OLOR ╥┴═ IS WHAT THE ╦┼╥╬┴L GETS CONFUSED ABOUT, THE SOLUTION
WAS TO NOT USE CERTAIN BIT PATTERNS OF COLORS:
╥┼─ 0010
├┘┴╬ 0011
┬╠╒┼ 0110
┘┼╠╠╧╫ 0111
╠╔╟╚╘ ╥┼─ 1010
─┴╥╦ ╟╥┴┘ 1011
╠╔╟╚╘ ┬╠╒┼ 1110
╠╔╟╘ ╟╥┴┘ 1111
╧╦ ├OLORS:
┬╠┴├╦ 0000
╫╚╔╘┼ 0001
╨╒╥╨╠┼ 0100
╟╥┼┼╬ 0101
╧╥┴╬╟┼ 1000
┬╥╧╫╬ 1001
═┼─╔╒═ ╟╥┴┘ 1100
╠╔╟╚╘ ╟╥┼┼╬ 1101
┴LL OF THE ┬┴─ COLORS HAVE BIT 1 SET. ╔ HAVE NO IDEA WHAT THE
SIGNIFICANCE OF THAT IS.
3) ┘OU NEEDED TO GET OUT OF THE TAPE LOAD CODE, BUT YOU ONLY HAD SO MANY
KEYS THAT WERE STILL ACTIVE. ╙O, IF YOU FOLLOWED THE DIRECTIONS ON
THE SCREEN, YOU COULD BREAK OUT. ╙INCE THE TAPE LOAD CODE USES ├╔┴ #1
FOR ITS OPERATIONS, IT WOULD TAKE OVER THE ╔├ AND THEN RESTORE IT
TO A CORRECT STATE WHEN EITHER THE LOAD WAS STOPPED OR THE LOAD
COMPLETED. ╬OW, THAT IS AMAZING!
(╙OMEONE IS FREE TO CHECK UP ON ME CONCERNING THIS, SINCE ╔ DO NOT
HAVE A ╥EV 1 ╥╧═ TO TRY OUT. ╔F SOMEONE HAS ONE, ╔ WOULD LIKE TO
HAVE A COPY OF IT ON DISK OR IN EMAIL. ┴ND IF SOMEONE HAS THE
INFORMATION ON THIS BUG FROM EITHER THE ═AY 1984 ╟AZETTE P108, OR
FROM THE ├╧═╨╒╘┼! ╘OOLKIT ╦ERNAL ╓╔├20/64, ╔ WOULD LIKE A COPY.)
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #4 FOR ╞EBRUARY, 1994.
╤ $030) ╧N A ├OMMODORE 64, WHAT IS THE AMOUNT OF ╥┴═ AVAILABLE FOR ┬┴╙╔├
PROGRAMS TO RESIDE IN?
┴ $030) ╙OME PEOPLE OVER-ANSWERED THIS QUESTION. ╘HE CORRECT ANSWER IS
38911 BYTES, WHICH IS WHAT THE ┬┴╙╔├ SCREEN SAYS. ╬OW, IT IS TRUE
THAT ┬┴╙╔├ CAN USE $├000-$├╞╞╞, AND SOME ZERO PAGES IS EASILY USED
BY ┬┴╙╔├, BUT IT IS NON-TRIVIAL TO GET ┬┴╙╔├ TO USE THESE AREAS.
╘HE MATH COMES OUT TO: $0801 (2048) TO $9╞╞╞ (40959) - 1 (0 IN
LOCATION 2048). ╨LEASE NOTE THAT THIS IS NOT THE MAXIMUM SIZE OF
A STANDARD ┬┴╙╔├ PROGRAM, EVEN IF IT DOES NOT USE VARIABLES, SINCE
┬┴╙╔├ STEALS 3 BYTES AT THE END OF THE PROGRAM TO DETERMINE THE END.
╤ $031) ╬AME ONE ├OMMODORE COMPUTER (PRE-┴MIGA) THAT USED TWO GENERAL PURPOSE
MICROPROCESSORS?
┴ $031) ╘HERE ARE TWO (OR MORE) ANSWERS TO THIS QUESTION. ╘HE OBVIOUS ANSWER
IS THE ├OMMODORE 128, BUT THE ├OMMODORE ╙UPER╨┼╘ (╙╨9000) HAD TWO,
ALSO. ╘HERE WAS ALSO AN OPTIONAL CARD TO ADD ANOTHER PROCESSOR TO
THE ┬-SERIES. ╬OTE THAT SOME ├OMMODORE PERIPHERALS ALSO HAD TWO
(OR MORE) MICROPROCESSORS, BUT THAT IS ANOTHER QUESTION.
╤ $032) ╫HAT ARE THEY?
┴ $032) ├OMMODORE 128: 8502(6510 CLONE) AND ┌80. ╙UPER╨┼╘: 6502 AND 6809.
┬-SERIES: 6509 AND 8088.
╤ $033) ╫HO WAS THE ├HIEF ┼XECUTIVE ╧FFICER OF ├┬═ WHEN THE ├OMMODORE ╓╔├-20
(╓├-20) WAS INTRODUCED?
┴ $033) ┴CCORDING TO MY SOURCES, IT IS NONE OTHER THAN ╩ACK ╘RAMIEL. ╫HILE
SOME CLAIM ╔RVING ╟OULD AS THE MAN-IN-CHARGE SINCE HE HAD
CONTROLLING INTEREST AT THE TIME, THE ├┼╧ WAS ╩ACK. ╫HETHER HE WAS
IN CHARGE OR NOT IS LEFT UP TO THE READER.
╤ $034) THE ├OMMODORE 64 AND 128 (AMONG OTHERS) HAVE A ╘╧─ FEATURE. ╫HAT DOES
╘╧─ STAND FOR?
┴ $034) ╘╧─ = ╘IME ╧F ─AY. ╘HE 6526 ├OMPLEX ╔NTERFACE ┴DAPTER IS THE HOLDER
OF THE ╘╧─ CLOCK, WHICH CAN BE USED IN LIEU OF THE SYSTEM JIFFY
SYSTEM CLOCK TO TIME THINGS, AS IT DOES NOT SUFFER FROM INTERRUPTIONS
TO SERVICE ╔/╧ AND SCREEN. ╬OTE THAT THE STANDARD KERNAL USES THE
SYSTEM CLOCK FOR ╘╔ AND ╘╔$, NOT THE ╘╧─ CLOCK.
╤ $035) ╫HAT LOCATION IN THE ├OMMODORE 64 ╦ERNAL HOLDS THE VERSION NUMBER?
┴ $035) $FF80 (65408).
╤ $036) ╘HE FIRST COMPUTER ├OMMDORE SOLD WAS THE ╦╔═-1. ╚OW MUCH ╥┴═ WAS
AVAILABLE ON THE ╦╔═-1?
┴ $036) 1.125╦ OR 1024+128 = 1152 BYTES.
╤ $037) ╫HO DESIGNED THE ARCHITECTURE FOR THE 6502 INTEGRATED CIRCUIT?
┴ $037) ├HUCK ╨EDDLE
╤ $038) ╫HAT WAS THE ORIGINAL NAME OF THE COMPANY THAT PRODUCED THE 6502?
┴ $038) ═╧╙ ╘ECHNOLOGIES
╤ $039) ╫HAT DID THE NAME STAND FOR?
┴ $039) ═╧╙ = ═ETAL ╧XIDE ╙EMICONDUCTOR, WHICH HAS THREE MAJOR FAMILIES:
╬═╧╙: ╬EGATIVE ═╧╙, ╨═╧╙: ╨OSITIVE ═╧╙, AND ├═╧╙: ├OMPLEMENTARY ═╧╙.
═╧╙ ╘ECHNOLOGIES PRODUCED MAINLY ╬═╧╙ ╔├S, HENCE THE USE OF ╬═╧╙
TECHNOLOGY FOR THE 6502 AND 6510.
╤ $03┴) ├OMMODORE ACQUIRED THE COMPANY AND RENAMED IT TO...?
┴ $03┴) ├╙╟ = ├OMMODORE ╙EMICONDUCTOR ╟ROUP. ╘HE RENAMING WAS NOT
INSTANTANEOUS, HAPPENING A NUMBER OF MONTHS(YEARS) AFTER THE
ACQUISITION.
╤ $03┬) ╘HE ├OMMODORE ╓╔├-20 GRAPHICS WERE POWERED BY THE ╓╔├-╔ (6560)
INTEGRATED CIRCUIT. ╫AS THE CHIP DESIGNED FOR THE COMPUTER, OR WAS
THE COMPUTER DESIGNED FOR THE CHIP?
┴ $03┬) ╘HE ╓╔├-╔ 6560-61, WAS DESIGNED 2 YEARS PRIOR TO THE DESIGN OF THE
╓╔├-20 COMPUTER. ╔T WAS DESIGNED TO BE BUILT INTO VIDEO GAMES, BUT
NO ONE WANTED TO USE IT, SO ├OMMODORE MADE THEIR OWN SYSTEM
AROUND IT TO RECOUP LOSSES.
╤ $03├) ╘HE ╓╔├-20 HAD A ╓IDEO ╔NTERFACE ├HIP (╓╔├) INSIDE IT, YET THAT WAS
NOT WHAT THE '╓╔├' IN THE MODEL NAME EXPANDED TO. ╫HAT DID IT
EXPAND TO?
┴ $03├) ╓╔├-20 = ╓IDEO ╔NTERFACE ├OMPUTER-20. ╘HE 20 WAS A ROUNDING DOWN
OF THE AMOUNT OF MEMORY IN THE ╓╔├: ▐22╦. ═ICHAEL ╘OMCZYK, WHO GOT
STUCK WITH THE JOB OF DECIDING ON THE NAME, DID THE ROUNDING.
╤ $03─) ╘HE MOST WIDELY KNOWN DISK DRIVE FOR ├OMMODORE COMPUTERS IS THE 1541.
HOW MUCH ╥┴═ DOES THE 1541 HAVE?
┴ $03─) 2048 BYTES, OR 2K┬ ╥┴═. ╔T IS MAPPED AT $0000-$07╞╞.
╤ $03┼) ╧N EVERY ├OMMODORE DISK, THE DRIVE STORES A COPY OF THE ┬┴═. ╫HAT
DOES ┬┴═ STAND FOR?
┴ $03┼) ┬┴═ = ┬LOCK ┴LLOCATION ═AP, OR ┬LOCK ┴VAILABILITY ═AP. ╔ AM CHECKING
SOURCES TO FIGURE OUT WHICH ONE IS THE REAL ═C├OY.
╤ $03╞) ╬OW, FOR THOSE INTO 6502 MACHINE LANGUAGE. ╫HAT INSTRUCTION WAS NOT
AVAILABLE ON THE FIRST 6502 CHIPS?
┴ $03╞) ╥╧╥ (╥╧TATE ╥IGHT) WAS NOT AVAILABLE UNTIL AFTER ╩UNE, 1976. ╚OWEVER,
ALL ├OMMODORE ╓╔├S AND ├64S SHOULD HAVE THIS INSTRUCTION. ╙OME PEOPLE
GAVE INSTRUCTIONS THAT ARE FOUND ON THE 65C02, DESIGNED BY ╫ESTERN
─ESIGN ├ENTER, AND LICENSED TO MANY COMPANIES. ╚OWEVER, THE 65C02
ITSELF OCCURS IN TWO FLAVORS, AND NEITHER ARE USED IN ANY STOCK
├OMMODORE PRODUCT ╔ KNOW OF.
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #5 FOR ┴PRIL, 1994.
╤ $040) ╘HE COMPANY THAT PRODUCES ╘HE ┬IG ┬LUE ╥EADER, A PROGRAM THAT ALLOWS
READING AND WRITING OF ╔┬═ FORMATTED DISK IN 1571S AND 1581S, IS
CALLED ╙╧╟╫┴╨. ╫HAT DOES ╙╧╟╫┴╨ STAND FOR?
┴ $040) ╙ON ╧F ╟OD ╫ITH ┴LL ╨OWER. ╘HEY ALSO MARKET THE ┬IBLE ON DISKETTES.
╤ $041) ╫HAT VERSION OF ─╧╙ DOES THE ├OMMODORE 8280 8 INCH DUAL DRIVE HAVE?
┴ $041) ╘HE 8280 HAS VERSION 3.0. ═ANY HAVE NOT EVER SEEN THIS ╔┼┼┼-488
COMPATIBLE DRIVE USED ON SOME ╨┼╘S. ╔T HAS THE SAME ─╧╙ VERSION
THAT IS IN THE ─90╪╪ HARD DRIVES, AND COULD READ 250K┬ AND 500K┬
╔┬═ FORMATTED DISKS, AS WELL AS SOME ├╨/═ FORMATS. ╬OTE THAT ALTHOUGH
THIS VERSION NUMBER IS USED ON THE 1570/71 DISK DRIVES, THE CODE IS
DIFFERENT.
╤ $042) ╫HAT WAS THE COLOR OF THE ORIGINAL ├OMMODORE 64 CASE?
┴ $042) ╙OME EARLY VERSIONS OF THE ├OMMODORE 64 WERE HOUSED IN ╓╔├-20 COLOR
CASES, SO OFF-WHITE IS THE CORRECT ANSWER.
╤ $043) ╧N AN UNEXPANDED ├OMMODORE 64, HOW DOES ONE READ THE ╥┴═
LOCATIONS $00 AND $01?
┴ $043) ╫ELL, YOU CANNOT DO SO WITH THE ├╨╒ DIRECTLY, SINCE IT RESOLVES THESE
LOCATIONS INTO INTERNAL ADDRESSES. ╚OWEVER, THE ╓╔├ ╔╔ CAN SEE THESE
ADDRESSES AS EXTERNAL MEMORY. ╙O, JUST MAKE ONE SPRITEXS WITH THE
FIRST BIT IN THE SPRITE SET, AND MOVE IT OVER THE FIRST TWO BYTES,
PRETENDING THEY ARE PART OF A BITMAP. ┬Y CHECKING THE SPRITE-TO-
BACKGROUND COLLISION REGISTER, YOU CAN TELL IF THE BIT IN THE BYTE IS
SET. ┼MAIL ME FOR A MORE COMPLETE DESCRIPTION.
╙VEN ╟OLDT AND ═ARKO ═AKELA GET CREDIT FOR THIS ANSWER AND THE NEXT.
╤ $044) ╧N AN UNEXPANDED ├OMMODORE 64, HOW DOES ONE WRITE THE SAME LOCATIONS?
┴ $044) ╔T SEEMS THE 6510 GENERATES A VALID ╥/╫ SIGNAL ANY TIME IT DOES AN
INTERNAL READ OR WRITE. ╘HIS IS TO BE EXPECTED, SINCE THE 6510
INTERNAL REGISTERS WERE GRAFTED ONTO A 6502 CORE PROCESSOR.
╚OWEVERE, THE ADDRESS LINES ARE ALSO VALID DURING ANY INTERNAL READ
OR WRITE, SINCE FAILURE TO DO SO MAY WRITE THE DATA ON THE DATA BUS
TO SOME INVALID ADDRESS. ╘HE DATA ON THE BUS, HOWEVER, COMES NOT FROM
THE ├╨╒, BUT FROM RESIDUAL EFFECTS OF THE DATA LAST READ OF WRITTEN BY
THE ╓╔├ CHIP. ╘HUS, BY PROGRAMMING THE ╓╔├ CHIP TO READ DATA FROM
SOME KNOWN LOCATION, AND BY PLACING RELEVANT DATA IN THAT LOCATION, A
WRITE TO LOCATION $00 OR $01 WILL PLACE THE DATA FROM THAT LAST READ
╓╔├ LOCATION INTO $00 OR $01. ╘HIS IS USUALLY ACCOMPLISHED BY PLACING
THE DATA TO BE WRITTEN OUT INTO LOCATION $3FFF, WHICH THE ╓╔├ FETCHES
DURING THE TIME THE BORDER IS BEING DISPLAYED. ┬Y TRIGGERING A
ROUTINE WHEN THE RASTER HITS THE BOTTOM BORDER, YOU CAN COPY LOCATION
$3FFF TO $00 OR $01.
╤ $045) ╫HAT IS '├┬2 ╙OUND', AND ON WHAT COMPUTERS WAS IT POPULAR?
┴ $045) ╘HIS IS THE SOUND MADE BY SENDING SQUARE OUT OF THE 6522 ╔├ ON SOME
├OMMODORE COMPUTERS. ╔T IS CALLED '├┬2', SINCE THAT IS THE NAME OF
THE PIN ON THE 6522 THAT OUTPUTS THE WAVEFORM. ╔ WON'T GO INTO A
COMPLETE DESCRIPTION, EXCEPT TO SAY THAT MOST MODELS OF THE ╨┼╘
HAD THE CAPABILITY, AND MOST ╨┼╘ OWNERS USED IT AS THE ╧╬╠┘ SOUND
SOURCE, SINCE THE ╨┼╘S DID NOT HAVE A SOUND CHIP. ┴LTHOUGH THE ╓╔├
DID HAVE SOME SOUND CAPABILITIES, BY THAT TIME ├OMMODORE HAD
REALIZED ITS WIDESPREAD USE AND INCLUDED SOME INFORMATION ON IT IN
THE ├OMMODORE ╓╔├-20 ╨ROGRAMMER'S ╥EFERENCE ╟UIDE. ╞OR MORE INFO,
REACH FOR YOUR NEAREST ╓╔├ ╨╥╟ AND LOOK AT PAGE 232.
╤ $046) IN QUESTION $021, THE ┬ATTERIES ╔NCLUDED LOGO DESCRIPTION WAS ASKED
FOR. ╬OW, WHAT IS THE NAME OF THE MAN IN THE LOGO?
┴ $046) "╚ERBIE" ╩IM ┬UTTERFIELD SUPPLIED ME WITH THIS ONE.
╤ $047) ╫HY WAS THE ├OMMODORE ╓╔├-20 PRODUCED WITH SO MANY 1╦ CHIPS IN IT?
(╚INT: IT HAD LITTLE TO DO WITH THE COST OF ╙╥┴═ AT THE TIME)
┴ $047) ╩ACK (╘RAMIEL) DECREED THAT ├OMMODORE HAD A SURPLUS OF 1╦ CHIPS,
SO HE DIDN'T CARE HOW MUCH MEMORY IT HAD, AS LONG AS THE DESIGNERS
USED 1╦ ╙╥┴═S.
╤ $048) ╫HAT DOES ┴─╙╥ STAND FOR?
┴ $048) ┴─╙╥ = ┴TTACK, ─ECAY, ╙USTAIN, ╥ELEASE. ╘HESE ARE THE FOUR VALUES
SPECIFIED TO DEFINE A ╙╔─ WAVEFORM ENVELOPE.
╤ $049) ╔N QUESTION $035, IT WAS LEARNED THAT THE ├OMMODORE 64 KERNAL
REVISION NUMBER IS STORED AT $FF80 (65408). ╬OW, WHAT IS THE NUMBER
STORED THERE FOR:
A) ╘HE FIRST REVISION?
B) ╘HE ╨┼╘64 (4064)?
┴ $049) A) 170. (┘EP, THIS WAS PRIOR TO 0!)
B) 100. (╘HE ╨┼╘ 64 USES THIS VALUE TO ADJUST THE STARTUP LOGO
ACCORDINGLY.)
╤ $04┴) ╫HO WAS THE MASTERMIND BEHIND THE ORIGINAL ├OMMODORE ╦ERNAL?
┴ $04┴) ╩OHN ╞EAGAN. ╚E HAD INTENDED IT TO PROVIDE UPWARD COMPATIBILITY
FOR FUTURE COMPUTER SYSTEMS. ╒NFORTUNATELY, THE KERNAL WAS
MODIFIED ENOUGH WITH EACH NEW COMPUTER SYSTEM, THAT THE IDEA OF
COMPATIBILITY NEVER REALLY SURFACED. ╙TILL, IT WAS A NICE TRY.
╤ $04┬) ╫HO DESIGNED THE FIRST ╓╔├ PROTOTYPE?
┴ $04┬) ╘HERE ARE TWO ANSWERS TO THIS QUESTION. ┴T THE TIME, THE ╓╔├ HAD NO
NAME AND WAS CALLED THE ═ICRO╨┼╘ OR ╬O ╬AME ├OMPUTER. ╩ACK ╘RAMIEL
WANTED TO SHOW SOME PROTOTYPES OF THE ╓╔├ AT THE 1980 ├OMSUMER
┼LECTRONICS ╙HOW (├┼╙). ╘HE FUNNY THING IS, HE GOT NOT ONE
PROTOTYPE, BUT ╘╫╧. ┬OB ┘ANNES, WORKING AGAINST TIME, HAD HACKED
TOGETHER A MINIMAL WORKING PROTOTYPE USING SPARE ╨┼╘/├┬═ PARTS.
┴NOTHER PROTOTYPE, BROUGHT TO THE SHOW BY ┬ILL ╙EILER AND ╩OHN
╞EAGANS, HAD BEEN PUT TOGETHER AFTER SOME PRELIMINARY DISCUSSIONS
WITH ┘ANNES.
╤ $04├) ╚OW MANY PINS DOES A ├OMMODORE 1525 PRINTHEAD HAVE IN IT?
┴ $04├) ╘RICK ╤UESTION. ╘HE TWO 1525 PRINTERS ╔ HAVE SHOW THAT THE 1525
PRINTHEAD HAS BUT ONE PIN. ╘HE SEVEN DOTS ARE CREATED BY A REVOLVING
7 SIDED STAR-WHEEL FOR THE PLATEN, WHICH PRESSES THE PAPER AGAINST THE
PRINTHEAD IN THE SEVEN DIFFERENT DOT LOCATIONS.
╤ $04─) ╫HY DOES MENTIONING A ╨┼╘ COMPUTER IN ╞RANCE MAKE PEOPLE CHUCKLE?
┴ $04─) ╨┼╘ MEANS "╞┴╥╘" THERE.
╤ $04┼) ╫HAT INTERFACE ╔├ IS USED TO DRIVE THE ╔┼┼┼-488 BUS IN A ╨┼╘ COMPUTER?
┴ $04┼) ┴ 6520. ╔T IS APPROPRIATELY CALLED A ╨╔┴ (╨ERIPHERAL ╔NTERFACE
┴DAPTER).
╤ $04╞) ╫HAT WAS THE PRIMARY REASON ├OMMODORE WENT TO A SERIAL BUS WITH THE
INTRODUCTION OF THE ╓╔├-20?
┴ $04╞) ╩IM ┬UTTERFIELD SUPPLIED ME WITH THIS ONE:
┴S YOU KNOW, THE FIRST ├OMMODORE COMPUTERS USED THE ╔┼┼┼ BUS TO
CONNECT TO PERIPHERALS SUCH AS DISK AND PRINTER. ╔ UNDERSTAND THAT
THESE WERE AVAILABLE ONLY FROM ONE SOURCE: ┬ELDEN CABLES. ┴
COUPLE OF YEARS INTO ├OMMODORE'S COMPUTER CAREER, ┬ELDEN WENT OUT
OF STOCK ON SUCH CABLES (MILITARY CONTRACT? WHO KNOWS?). ╔N ANY
CASE, ├OMMODORE WERE IN QUITE A FIX: THEY MADE COMPUTERS AND DISK
DRIVES, BUT COULDN'T HOOK 'EM TOGETHER! ╙O ╘RAMIEL ISSUED THE
ORDER: "╧N OUR NEXT COMPUTER, GET OFF THAT BUS. ═AKE IT A CABLE
ANYONE CAN MANUFACTURE". ┴ND SO, STARTING WITH THE ╓╔├-20 THE
SERIAL BUS WAS BORN. ╔T WAS INTENDED TO BE JUST AS FAST AS THE
╔┼┼┼-488 IT REPLACED.
┴ND IT WOULD HAVE BEEN, EXCEPT DOR ONE SMALL GLITCH. ┬UT THAT IS
ANOTHER TRIVIA QUESTION.
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #6 FOR ═AY, 1994.
╤ $050) ╘HE ├OMMODORE 1551 ─ISK ─RIVE IS A PARALLEL DEVICE. ╚OW DID IT
CONNECT TO THE ├OMMODORE ╨LUS/4 AND ├16?
┴ $050) ╘HE ├OMMODORE 1551 CONNECTED VIA THE EXPANSION PORT. ╘HEREFORE, IT
WAS A PARALLEL DEVICE, AND COULD WORK AT MUCH FASTER SPEEDS.
╤ $051) ╚OW MANY COULD YOU ATTACH?
┴ $051) ╘WO, ╘HE SECOND DRIVE CABLE ATTACHED TO THE BACK OF THE FIRST CABLE.
╤ $052) ╫HAT WERE THE ADDRESSES THEY USED? (╬OT DEVICE NUMBERS)
┴ $052) ╘HE TWO DRIVES WERE MAPPED INTO THE ┴DDRESS SPACE AT $FEC0 AND $FEF0
OF THE ╨LUS/4 OR ├-16. ╘HE 6523 ╘RIPLE ╔NTERFACE ┴DAPTOR CHIP IS
MAPPED IN AT THESE LOCATIONS AND HAS 8 REGISTERS EACH.
╤ $053) ╫HAT IS THE MAXIMUM NUMBER OF SOUND OCTAVES THE ╓╔├-20 SOUND GENERATOR
CAN REACH?
┴ $053) ╘HIS HAS TWO EQUALLY VALID ANSWERS. ╧N THE ╓IC-20, EACH SOUND
GENERATOR HAS A RANGE OF 3 OCTAVES. ╚OWEVER, ALL THE SOUND GENERATORS
TOGETHER CAN RANGE 5 OCTAVES, SINCE EACH SOUND GENERATOR IS STAGGERED
ONE OCTAVE APART.
╤ $054) ╫HO WROTE THE REFERENCE GUIDE THAT WAS DISTRIBUTED WITH ALMOST EVERY
╨┼╘ COMPUTER SOLD?
┴ $054) ╘HE INFAMOUS ┴DAM ╧SBORNE, OF ╧SBORNE ╔ FAME.
╤ $055) ╘HE BOX THAT THE ├64 COMES IN HAS SOME PROPAGANDA ON THE SIDE
DESCRIBING THE UNIT. ╔N THE SPECIFICATIONS SECTION, IT CLAIMS HOW
MANY SPRITES CAN BE ON SCREEN AT ONE TIME?
┴ $055) ╔ NEGLECTED TO NOTE THAT THE ├OMMODORE 64 PACKING BOX HAS UNDERWENT
MANY CHANGES. ╚OWEVER, FOR QUITE A WHILE, ├┬═ USED A BLUE BOX WITH
MANY VIEWS OF THE 64, AND A SPECIFICATION LIST ON ON SIDE OF THE BOX.
╧N THAT SPEC LIST, IT CLAIMS THAT THE THE 64 CAN HAVE "256
INDEPENDENTLY CONTROLLED OBJECTS, 8 ON ONE LINE." ╫HY IS THIS
IMPORTANT? ╔T GIVES US A CLUE THAT THE ╓╔├-╔╔ DESIGNERS FIGURED PEOPLE
WOULD AND COULD USE THE INTERRRUPTS ON THE ╓╔├-╔╔ TO CHANGE SPRITE
POINTERS.
╤ $056) ╘HE ├OMMODORE ╨LUS/4 COMPUTER CONTAINED THE FIRST INTEGRATED SOFTWARE
PACKAGE TO BE PLACED IN A PERSONAL COMPUTER. ╫HAT WAS THE NAME OF THE
SOFTWARE PACKAGE?
┴ $056) ╘HE PACKAGE WAS CALLED "3+1".
╤ $057) ╫HAT POPULAR COMPUTER SOFTWARE DID THE SOFTWARE PACKAGE PARODY?
┴ $057) ╠OTUS 1-2-3.
╤ $058) ╧NE FAMILIAR ├OMMODORE PORTABLE COMPUTER WAS CALLED THE ╙╪-64.
╫HAT DID ╙╪ REALLY STAND FOR?
┴ $058) ─EPENDING ON WHOM YOU BELIEVE, THE ╙╪ STANDS FOR TWO THINGS. ╔F YOU
CHOOSE TO BELIEVE ╩ACK ╘RAMIEL, THE ╙╪ STANDS FOR "SEX", SINCE ╩ACK
HAS BEEN QUOTED AS SAYING, "┬USINESS IS LIKE SEX, ┘OU HAVE TO BE
INVOLVED". ╘HIS IS A PLAUSIBLE ANSWER, AS ╩ACK USUALLY PICKED THE
NAMES OF THE COMPUTERS. ╚OWEVER, IF YOU DON'T BUY THAT, HERE IS THE
MARKETING VERSION. ╙╪ STANDS FOR ╙INGLE ─RIVE ┼XECUTIVE, AS THE
PORTABLE 64 WAS CALLED THE ┼XECUTIVE 64. ╘HERE WAS TO HAVE BEEN A ─╪
MODEL, WHICH WOULD HAVE HAD TWO DRIVES. ┘OU DECIDE.
╤ $059) ╫HO (WHAT PERSON) INVENTED THE ╙OUND ╔NTERFACE ─EVICE (╙╔─) CHIP?
┴ $059) ┬OB ┘ANNES, WHO ALSO WORKED ON ONE OF THE ╓╔├ PROTOTYPES, DEVELOPED
THIS CHIP.
╤ $05┴) ╘HE ILL-FATED ╒LTI═AX (LATER CALLED THE ═┴╪ ═ACHINE) CONTAINED A
NUMBER OF ├OMMODORE 64 FEATURES. ╚OWEVER, IT DID NOT SHARE THE 64'S
FEATURE OF 64K┬ ╥┴═. ╚OW MUCH ╥┴═ DID THE ═┴╪ HAVE?
┴ $05┴) ┴ WHOPPING 2 KILOBYTES. ╔F YOU PLUGGED IN THE ┬┴╙╔├ CARTRIDGE,
MEMORY DROPPED TO .5 KILOBYTE OR 512 BYTES. ╬O WONDER ├┬═ SCRAPPED
THIS ONE.
╤ $05┬) ╫HAT FAMOUS PERSON WAS FEATURED IN ╒.╙. TELEVISION ADVERTISING FOR
THE ╓╔├-20?
┴ $05┬) ╫ILLIAM ╙HATNER. ┘ES, ├APTAIN ╩AMES ╘. ╦IRK HIMSELF DID THE ADS.
╚E WAS NOT, HOWEVER, IN UNIFORM, SINCE ├┬═ DID NOT HAVE RIGHTS TO
╙TAR ╘REK OF ANY SORT.
╤ $05├) ╫HAT COMPANY DESIGNED THE FIRST ╓╔├═ODEM?
┴ $05├) ┴NCHOR ┴UTOMATION. ╙OMETIMES CALLED THE "═OST ╔NEXPENSIVE ═ODEM",
THE ╓╔├═ODEM WAS DESIGNED TO BE SOLD FOR UNDER $100 WHEN MOST WERE
$400 OR MORE. ╘HE SECRET TO THE COST CONTAINMENT WAS THE ABILITY TO
USE WHAT WE SOETIMES THINK OF AS A DISADVANTAGE OF THE ╒SER ╨ORT TO
THE MODEM'S ADVANTAGE. ╘HE ╘╘╠ LEVEL ╥╙-232 SIGNALS DID NOT NEED TO
BE BUFFERED BEFORE DRIVING THE MODEM, AND THE +5 VOLT POWER AVAILABLE
THROUGH THE ╒SER ╨ORT JUST WAS NOT AVAILABLE THROUGH NORMAL ╥╙-232
LINES. ╬OT HAVING THE ALREADY ╘╘╠ LEVEL SIGNALS WOULD HAVE MEANT
EXTRA COMPONENTS THAT WOULD HAVE INCREASED CASE SIZE AND COST, AND NOT
HAVING THE ON-BOARD POWER WOULD HAVE MEANT A POWER CONNECTOR AND POWER
SUPPLY WOULD NEED TO BE BUNDLED. ┬EING ONE OF THOSE PEOPLE WHO USED
THE FIRST ╓╔├═ODEM, ╔ CAN TELL YOU IT WAS WORTH THE HASSLE.
╤ $05─) ┼VERYONE HAS SEEN OR HEARD OF ┬┘╘┼ ═AGAZINE. ╦NOWN FOR TECHNICAL
ARTICLES IN THE 80'S, AND COVERAGE OF ╨├ PRODUCTS IN THE 90'S, ┬┘╘┼
WAS FOUNDED BY ╫AYNE ╟REEN. ╫HAT ├OMMODORE COMPUTER MAGAZINE DID
╫AYNE ╟REEN LATER PUBLISH?
┴ $05─) ╥╒╬ ═AGAZINE. ┴S OF RIGHT NOW, ├═─ HAS PURCHASED THE RIGHTS TO ╥╒╬.
╤ $05┼) (╘HREE PART QUESTION) ╫HAT ARE THE OFFICIAL NAMES OF THE COLORS
USED ON THE ╓╔├-20:
A) CASE?
B) REGULAR TYPEWRITER KEYS?
C) FUNCTION KEYS?
┴ $05┼) A) IVORY.
B) CHOCOLATE BROWN.
C) MUSTARD.
╤ $05╞) ├OMMODORE IS SET UP AS A ___________ CHARTERED COMPANY. ╬AME
THE MISSING COUNTRY.
┴ $05╞) ┬AHAMAS. ─OING SO GAVE ├┬═ A GREAT TAX BREAK. ╫ITH THE TAX RATE IN
THE ┬AHAMAS AS LOW AS 1%, MORE MONEY COULD BE KEPT FROM THE
GOVERNMENTS.
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #7 FOR ═AY, 1994.
╤ $060) ╫HEN YOU TURN ON STOCK ├OMMODORE 16, HOW MANY BYTES FREE DOES IT
REPORT?
┴ $060) ┴CCORDING TO THE INITIAL POWER-UP INDICATION ON THE MONITOR, A STOCK
├OMMODORE 16 HAS 12277 BYTES FREE FOR ┬┴╙╔├ PROGRAM USE. ┴ NUMBER OD
PEOPLE HAVE CALCULATED 12287 BYTES, SO THE POWER-ON MESSAGE MAY BE IN
ERROR. ╔ GUESS IT IS TIME TO DIG OUT THE ├-16 AND POWER IT UP.
╤ $061) ╚OW MANY DOES A STOCK ╨LUS/4 REPORT?
┴ $061) ┴CCORDING TO ITS INITIAL POWER-UP MESSAGE, THE ╨LUS/4 HAS 60671
BYTES FREE.
╤ $062) ╫HAT WAS THE ╓╔├-20'S SUBTITLE?
┴ $062) "╘HE ╞RIENDLY ├OMPUTER"
╤ $063) ╫HAT PERSONALITY ANNOUNCED THE BIRTH OF THE ├OMMODORE 64 IN
├HRISTMAS ADVERTISEMENTS?
┴ $063) ╘HOUGH NOT WELL-KNOWN OUTSIDE OF THE ╒╙, ╚ENRY ═ORGAN INTRODUCED THE
NEW ├OMMODORE 64 COMPUTER SYSTEM IN THE ╒╙. ╔N OTHER COUNTRIES, THE
ANSWERS DIFFER, AS COUNTRIES LIKE ╞INLAND HAD THE ╙TATUE OF ╠IBERTY
ANNOUNCE THE ├64 BIRTH.
╤ $064) ╫HAT WAS THE NAME OF THE MONITOR PROGRAM INCLUDED IN THE ╨LUS/4?
┴ $064) ╘┼─═ON. ╘┼─, AS YOU KNOW, STOOD FOR ╘EXT ┼DITING ─EVICE.
╤ $065) ╚OW MANY SECTORS PER TRACK ARE THERE FOR TRACKS 1-17 ON A 1541?
┴ $065) 21.
╤ $066) ╘HERE ARE TWO PROGRAMS RUNNING IN THE ├OMMODORE SINGLE-6502 DRIVES
(1541,1571,1541 ╔╔,1581). ╫HAT IS THE INTERPRETER PROGRAM CALLED?
┴ $066) ╘HE INTERPRETER PROGRAM IS CALLED THE ╔NTERFACE ╨ROCESSOR (╔╨). ╔T
HANDLES THE DISPATCHING OF ALL COMMANDS SENT TO THE DRIVE, AS WELL
AS CORRDINATING THE FLOW OF TRAFFIC BETWEEN THE DISK AND THE COMPUTER.
╤ $067) ╚OW DO YOU DO A HARD RESET ON A ╨LUS/4 ?
┴ $067) ╞IRST, WE NEED TO DEFINE HARD-RESET. ┴ RESET DIFFERS FROM A POWER-
CYCLE, SINCE THE LATTER DOES NOT RETAIN THE ╥┴═ CONTENTS. ╔N THIS
CASE, THE ANSWER IS ANALOGOUS TO THE ╥╒╬/╙╘╧╨-╥┼╙╘╧╥┼ COMBINATION
FOUND ON THE 64 AND ╓╔├-20. ╚OLD DOWN ╥╒╬/╙╘╧╨ AND ├╘╥╠ AND PRESS THE
RECESSED RESET BUTTON ON THE SIDE OF THE COMPUTER. ╔ BELIEVE THIS
WORKS FOR THE ├-16 AS WELL.
╤ $068) ╫HERE DID THE NAME "├OMMODORE" COME FROM?
┴ $068) ╥UMOR HAS IT THAT ╩ACK ╘RAMIEL ALWAYS WANTE TO USE A NAUGHTICAL TERM,
BUT MOST HAD BEEN ALREADY USED. ╚OWEVER, ONE DAY HE WATCHED A MOVING
COMPANY VAN PASS BY ON THE STREET WITH THE NAME HE DECIDED TO USE AS
SOON AS HE SAW IT: ├OMMODORE.
╤ $069) ├HUCK ╨EDDLE, DESIGNER OF THE 6502, LEFT ├OMMODORE TWICE. ╫HERE DID HE
GO FIRST?
┴ $069) ╚E WENT TO ┴PPLE ├OMPUTER. ╚E STAYED WITH THEM BRIEFLY, BUT IT SEEMS
THAT ┴PPLE AND ├HUCK GOT ALONG EVEN WORSE THAN ├OMMODORE AND ├HUCK.
╤ $06┴) ╫HERE DID HE EVENTUALLY GO WHEN HE LEFT FOR GOOD?
┴ $06┴) ╞IRST, HE WENT OFF TO START A COMPANY CALLED ╙IRIUS, WHICH DIED ALMOST
BEFORE IT STARTED DUE TO A LAWSUIT OVER THE NAME. ╘HEN, HE AND SOME
FORMER ├OMMODORE DESIGNERS CAME UP WITH THE "╓ICTOR" COMPUTER, WHICH
DID MODESTLY, BUT NEVER TOOK OFF.
╤ $06┬) ╫HAT DOES THE ╦ERNAL ROUTINE AT $╞╞─2 DO IN TERMS OF FUNCTION AND WHAT
PARAMETERS GET PASSED AND RETURNED?
┴ $06┬) ╘HE ╦┼╥╬┴╠ ROUTINE AT $╞╞─2 ON ALL ├OMMODORE 8 BIT MACHINES OUTPUTS THE
╨┼╘╙├╔╔ CHARACTER CODE CONTAINED IN THE .┴ REGISTER TO THE CURRENT
OUTPUT DEVICE. ╘HE CARRY FLAG INDICATES THE PRESENCE OF AN ERROR ON
RETURN.
╤ $06├) ╫HAT ├OMMODORE DRIVE HAS A HIDDEN MESSAGE?
┴ $06├) ╘HE 1581 HAS A COUPLE SUCH HIDDEN MESSAGES. ╔N THE IDLE LOOP OF THE
╔╨, THE TEXT SAYS "AM I LAZY???...NO JUST WANTED TO SAVE A FEW MS...".
┴LSO, IN THE SAME LOOP, THE FOLLOWING CAN BE FOUND: "THIS IS LAZY!!!".
╠ASTLY, THE CREDITS IN THE 1581 ROMS ARE: "╙OFTWARE DAVID SIRACUSA.
HARDWARE GREG BERLI╬┌─EDICATEDTO MY WIFE LIS┴". (╬OTE: THE ╬ IN BERLI╬
AND THE ┴ IN LIS┴ IS TYPICAL OF HOW STRINGS ARE STORED IN THE 1581,
LAST BYTE HAS BIT 7 SET. ╘HE ┌ AFTER BERLI╬ APPEARS TO HAVE BEEN A
TYPO, BUT ╔ CAN'T SAY FOR SURE. ╔ HAVE A PROGRAM THAT DISPLAYS THESE.
(┼MAIL ME FOR INFO.)
╘HE 1571 HAS THE ╥╧═ AUTHORS' NAMES HIDDEN AT THE BEGINNING OF THE
╥╧═, BUT ╔ DON'T HAVE A 1571 TO SCAN FOR THEM.
╤ $06─) ╫HAT COMPUTER WAS THE FIRST TO HAVE A HIDDEN MESSAGE?
┴ $06─) ╘HE ╨┼╘ 2001. ╙OME SAID THE 128 HAS A HIDDEN MESSAGE, BUT IT WASN'T
THE FIRST.
╤ $06┼) ╫HAT WAS IT AND HOW DID YOU GET IT TO COME UP?
┴ $06┼) ┬Y TYPING:
WAIT 6502,X (WHERE X WAS A NUMBER BETWEEN 1 AND 255)
THE COMPUTER PRINTED ═ICROSOFT! X TIMES ON THE SCREEN.
╤ $06╞) ╫HAT DOES ╬╘╙├ STAND FOR?
┴ $06╞) ╘RUTHFULLY, ╬╘╙├ CAN STAND FOR DIFFERENT THINGS. ╔N REGARDS TO THE
TELEVISION STANDARD FOR THE ╒╙, THE EXPANSION IS ╬ATIONAL ╘ELEVISION
╙TANDARD ├ODE. ╚OWEVER, THE BODY THAT FORMED THE STANDARD IS ALSO
CALLED ╬╘╙├: ╬ATIONAL ╘ELEVISION ╙YSTEM ├OMMITTEE.
├OMMODORE ╘RIVIA ┼DITION #8
╤ $070) ╧N A ╨┼╘ SERIES COMPUTER, WHAT VISUAL POWER-ON INDICATION WILL TELL
THE USER WHETHER THE COMPUTER HAS ╥EVISION 2 OR ╥EVISION 3 ╥╧═S?
╤ $071) ╘HE ╔┼┼┼-488 INTERFACE IS SOMETIMES CALLED THE ╟╨╔┬ INTERFACE.
╫HAT DOES ╟╨╔┬ STAND FOR?
╤ $072) ├OMMODORE MANUFACTURED AT LEAST TWO HARD DRIVES WITH ╔┼┼┼-488
INTERFACES. ├AN YOU NAME THEM?
╤ $073) ╫HY DIDN'T BUYERS LIKE THE ORIGINAL ╨┼╘-64?
╤ $074) ╧N A ╨┼╘ ╥EVISION 2 ╥╧═, WHAT WAS THE LARGEST SINGLE ARRAY SIZE THAT
┬┴╙╔├ COULD HANDLE?
╤ $075) ╧N THE STOCK 1541, DATA IS TRANSMITTED ONE BIT AT A TIME. ╚OW MANY
BITS ARE TRANSFERRED AT A TIME ON THE ├OMMODORE 1551 DISK DRIVE?
╤ $076) ╧N ALL ├OMMODORE FLOPPY DISK DRIVES, HOW FAST DOES THE DISK SPIN?
╤ $077) ╒PON FIRST READING THE ├OMMODORE 1541 ┼RROR CHANNEL AFTER TURNING
ON THE DISK DRIVE, WHAT ERROR NUMBER AND TEXT IS RETURNED?
╤ $078) ╫HAT ERROR NUMBER AND TEXT IS RETURNED ON A 1551?
╤ $079) ├OMMODORE PRINTERS ARE NORMALLY ASSIGNED TO DEVICE #4, BUT THEY
CAN BE ALSO USED AS DEVICE #?
╤ $07┴) ╫HAT MICROPROCESSOR IS USED IN THE ├OMMODORE 1551 DISK DRIVE?
╤ $07┬) ╫HEN THE ╓╔├-20 WAS DESIGNED, THE SERIAL PORT THROUGHPUT WAS ROUGHLY
EQUIVALENT TO THE THROUGHPUT OF THE ╔┼┼┼-488 BUS? ╫HY ISN'T IT
VERY FAST IN PRODUCTION ╓╔├S?
╤ $07├) ╧N ├OMMODORE COMPUTERS, HOW MUCH ╥┴═ IS SET ASIDE AS A TAPE BUFFER?
╤ $07─) ╧N ├OMMODORE COMPUTERS, MOST EVERY PERIPHERAL HAS A DEVICE NUMBER.
╫HAT IS THE DEVICE NUMBER OF THE SCREEN?
╤ $07┼) ╫HAT IS THE DEVICE NUMBER OF THE KEYBOARD?
╤ $07╞) ├OMMODORE COMPUTERS USE 2'S-COMPLEMENT NOTATION TO REPRESENT INTEGERS.
╫HAT IS THE 2'S-COMPLEMENT HEX REPRESENTATION OF THE SIGNLE BYTE -1?
╙OME ARE EASY, SOME ARE HARD, TRY YOUR HAND AT:
├OMMODORE ╘RIVIA ┼DITION #8!
╩IM ┬RAIN
BRAIN@MAIL.MSEN.COM
2306 ┬ ╚ARTLAND ╥OAD
╚ARTLAND, ═╔ 48353
(810) 737-7300 X8528
=============================================================================
╥╙232 ├ONVERTER
BY ╫ALTER ╫ICKERSHAM (SHADOW@CONNECTED.COM)
[┼DITOR'S NOTE: ╔'M WARY OF THERE BEING NO VOLTAGE TRANSLATION BUT AM INCLUDING
IT BECAUSE ╔ _DO_ THINK YOU CAN GET AWAY WITH IT... ╚OWEVER, BECAUSE THIS
MAGAZINE IS FREE YOU GET WHAT YOU PAY FOR... ]
╚ERE'S A MODEM INTERFACE SCHEMATIC FOR THE ├=64/128, WITH IT, AND AROUND
$5.00, YOU CAN USE ALMOST ANY HAYES COMPAT. EXTERNAL MODEM. ╘O THE BEST OF
MY KNOWEDGE, THE 64 HAS A MAXIMUM BAUD RATE (THROUGH THE USER PORT) OF 2400,
AND THE 128'S IS 9600.
╔ ─╧ ╬╧╘ KNOW WHO THE ORIGINAL AUTHOR OF THIS IS, BUT I RE-WROTE IT IN MY
OWN WORDS, HOPING IT WILL HELP SOMEONE. ╔ ├╠┴╔═ ╬╧ ╥╔╟╚╘╙ ╘╧ ╘╚╔╙ ┴╥╘╔├╠┼.
╨┴╥╘╙ ╠╔╙╘:
-------------
7404 ╚EX ╔NVERTER ╔├ ($0.99 AT ╥ADIO ╙HACK)
╫IRES, SOLDER, ETC.
├OMMODORE ╒SER PORT CONNECTOR (╔ USED ONE OFF A OLD 1650)
╚ERE ╔T IS:
├64/128 ╒╙┼╥ ╨╧╥╘ ╥╙232 ┴─┴╨╘┼╥ ╥╙232├
┴ & ╬ -----------------------╟╥╧╒╬─---------------------- 1 & 7
┬ & ├ ---------------------2-7404
7404-1---------------------- 3
═ -------------------------3-7404
7404-4---------------------- 2
╚-------------------------------------------------------- 8
┼-------------------------------------------------------- 20
╦ ------------------------------------------------------- 5
╠ ------------------------------------------------------- 6
╨IN #2N THE USER PORT ═╒╙╘ BE CONNECTED TO PIN 14 OF THE 7404.
╨INS ┴&╬ (GROUND) ═╒╙╘ BE CONNECTED TO PIN 7 OF THE 7404.
╞OR THOSE OF YOU WHO DON'T HAVE A PINOUT OF THE USER PORT, HERE, HAVE ONE.
(╘╧╨)
1-2-3-4-5-6-7-8-9-10-11-12
--------------------------
┴-┬-├-─-┼-╞-╟-╚-╔-╩--╦--╠-
(┬╧╘╘╧═)
╘╚╔╙ ─╧┼╙ ╫╧╥╦, THAT'S WHY I'M MODEMING AT 2400. :->, BUT I SOMETIMES
RECIEVE LINE NOISE, SO ANY UPGRADES TO THIS WOULD BE APPRECIATED (I KNOW
IT'S NOT MY PHONE LINE).
=============================================================================
╨ROGRAMMING THE ├OMMODORE ╥┴═ ┼XPANSION ╒NITS (╥┼╒S)
BY ╥ICHARD ╚ABLE (╥ICHARD.╚ABLE@JK.UNI-LINZ.AC.AT)
╘HE FOLLOWING ARTICLE, INITIALLY WRITTEN FOR A MAILING LIST, DESCRIBES
THE ├OMMODORE ╥┼╒S AND EXPLANES HOW TO PROGRAM THEM.
├ONTENTS:
1) ┼XTERNAL ╥┴═ ┴CCESS ╫ITH ╥┼╒S
2) ╥┴═ ┼XPANSION ├ONTROLLER (╥┼├) ╥EGISTERS
3) ╚OW ╘O ╥ECOGNIZE ╘HE ╥┼╒
4) ╙IMPLE ╥┴═ ╘RANSFER
5) ┴DDITIONAL ╞EATURES
6) ╘RANSFER ╙PEED
7) ╔NTERRUPTS
8) ┼XECUTING ├ODE ╔N ┼XPANDED ═EMORY
9) ╧THER ╒SEFUL ┴PPLICATIONS ╧F ╘HE ╥┼╒
10) ├OMPARISION ╧F ┬ANK ╙WITCHING AND ─═┴
1) _┼XTERNAL ╥┴═ ┴CCESS ╫ITH ╥┼╒S_
╘HE ╥┼╒S PROVIDE ADDITIONAL ╥┴═ FOR THE ├64/128. ╘HREE TYPES OF ╥┼╒S HAVE
BEEN PRODUCED BY ├OMMODORE. ╘HESE ARE THE 1700, 1764 AND 1750 WITH 128, 256
AND 512 ╦┬YTES BUILT IN ╥┴═. ╚OWEVER, THEY CAN BE EXTENDED UP TO SEVERAL
═┬YTES.
╘HE EXTERNAL MEMORY CAN NOT BE DIRECTLY ADDRESSED BY THE ├64 WITH ITS 16 BIT
ADDRESS SPACE--IT HAS TO BE TRANSFERRED FROM AND TO THE MAIN MEMORY OF THE
├64. ╞OR THAT PURPOSE, THERE IS A BUILT IN ╥┴═ ┼XPANSION ├ONTROLLER (╥┼├)
WHICH TRANSFERS MEMORY BETWEEN THE ├64 AND THE ╥┼╒ USING ─IRECT ═EMORY ┴CCESS
(─═┴). ╔T CAN ALSO BE USED FOR OTHER PURPOSES.
2) _╥┴═ ┼XPANSION ├ONTROLLER (╥┼├) ╥EGISTERS_
╘HE ╥┼├ IS PROGRAMMED BY ACCESSING ITS REGISTERS. ╫HEN A ╥┼╒ IS CONNECTED
THROUGH THE EXPANSION PORT, THESE REGISTERS APPEAR MEMORY MAPPED IN THE
╔/╧-AREA BETWEEN $─╞00 AND $─╞0┴. ╘HEY CAN BE READ AND WRITTEN TO LIKE ╓╔├-
AND ╙╔─-REGISTERS.
$─╞00: ╙╘┴╘╒╙ ╥┼╟╔╙╘┼╥
╓ARIOUS INFORMATION CAN BE OBTAINED (READ ONLY).
┬IT 7: ╔╬╘┼╥╥╒╨╘ ╨┼╬─╔╬╟ (1 = INTERRUPT WAITING TO BE SERVED)
UNNECESSARY
┬IT 6: ┼╬─ ╧╞ ┬╠╧├╦ (1 = TRANSFER COMPLETE)
UNNECESSARY
┬IT 5: ╞┴╒╠╘ (1 = BLOCK VERIFY ERROR)
SET IF A DIFFERENCE BETWEEN ├64 AND ╥┼╒ MEMORY AREAS
WAS FOUND DURING A COMPARE COMMAND
┬IT 4: ╙╔┌┼ (1 = 256 ╦┬)
SEEMS TO INDICATE THE SIZE OF THE ╥┴═-CHIPS;
SET ON 1764 AND 1750, CLEAR ON 1700.
┬ITS 3..0: ╓┼╥╙╔╧╬
CONTAINS 0 ON MY ╥┼╒.
$─╞01: ├╧══┴╬─ ╥┼╟╔╙╘┼╥
┬Y WRITING TO THIS REGISTER, ╥┴═ TRANSFER OR COMPARISION CAN BE
EXECUTED.
┬IT 7: ┼╪┼├╒╘┼ (1 = TRANSFER PER CURRENT CONFIGURATION)
MUST BE SET TO EXECUTE A COMMAND
┬IT 6: RESERVED (NORMALLY 0)
┬IT 5: ╠╧┴─ (1 = ENABLE AUTOLOAD OPTION)
╫ITH AUTOLOAD ENABLED, THE ADDRESS AND LENGTH REGISTERS (SEE
BELOW) WILL BE UNCHANGED AFTER A COMMAND EXECUTION.
╧THERWISE, THE ADDRESS REGISTERS WILL BE COUNTED UP TO THE
ADDRESS OF THE LAST ACCESSED BYTE OF A ─═┴ + 1
AND THE LENGTH REGISTER WILL BE CHANGED (NORMALLY TO 1).
┬IT 4: ╞╞00
╔F THIS BIT IS SET, COMMAND EXECUTION STARTS IMMEDIATELY
AFTER SETTING THE COMMAND REGISTER.
╧THERWISE, COMMAND EXECUTION IS DELAYED UNTIL WRITE ACCESS TO
MEMORY POSITION $╞╞00.
┬ITS 3..2: RESERVED (NORMALLY 0)
┬ITS 1..0: ╘╥┴╬╙╞┼╥ ╘┘╨┼
00 = TRANSFER ├64 -> ╥┼╒
01 = TRANSFER ╥┼╒ -> ├64
10 = SWAP ├64 <-> ╥┼╒
11 = COMPARE ├64 - ╥┼╒
$─╞02..$─╞03: ├64 ┬┴╙┼ ┴──╥┼╙╙
16-BIT ├64 BASE ADDRESS IN LOW/HIGH ORDER
$─╞04..$─╞06: ╥┼╒ ┬┴╙┼ ┴──╥┼╙╙
╘HIS IS A THREE BYTE ADDRESS, CONSISTING OF A LOW AND
HIGH BYTE AND AN EXPANSION BANK NUMBER.
╬ORMALLY, ONLY BITS 2..0 OF THE EXPANSION BANK ARE VALID
(FOR A MAXIMUM OF 512 ╦┬YTE), THE OTHER BITS ARE ALWAYS
SET.
$─╞07..$─╞08: ╘╥┴╬╙╞┼╥ ╠┼╬╟╘╚
╘HIS IS A 16 BIT VALUE CONTAINING THE NUMBER OF BYTES TO
TRANSFER OR COMPARE.
╘HE VALUE 0 STANDS FOR 64 ╦┬YTES.
╔F THE TRANSFER LENGTH PLUS THE ├64 BASE ADDRESS EXCEEDS
64╦, THE ├64 ADDRESS WILL OVERFLOW AND CAUSE ├64 MEMORY
FROM 0 ON TO BE ACCESSED.
╔F THE TRANSFER LENGTH PLUS THE ╥┼╒ BASE ADDRESS EXCEEDS
512╦, THE ╥┼╒ ADDRESS WILL OVERFLOW AND CAUSE ╥┼╒ MEMORY
FROM 0 ON TO BE ACCESSED.
$─╞09: ╔╬╘┼╥╥╒╨╘ ═┴╙╦ ╥┼╟╔╙╘┼╥
UNNECESSARY
┬IT 7: ╔╬╘┼╥╥╒╨╘ ┼╬┴┬╠┼ (1 = INTERRUPT ENABLED)
┬IT 6: ┼╬─ ╧╞ ┬╠╧├╦ ═┴╙╦ (1 = INTERRUPT ON END)
┬IT 5: ╓┼╥╔╞┘ ┼╥╥╧╥ (1 = INTERRUPT ON VERIFY ERROR)
┬ITS 4..0: UNUSED (NORMALLY ALL SET)
$─╞0┴: ┴──╥┼╙╙ ├╧╬╘╥╧╠ ╥┼╟╔╙╘┼╥
╫ITH THIS REGISTER, ADDRESS COUNTING DURING ─═┴ CAN BE CONTROLLED.
╔F A BASE ADDRESS IS FIXED, THE SAME BYTE IS USED REPEATEDLY.
┬IT 7: ├64 ┴──╥┼╙╙ ├╧╬╘╥╧╠ (1 = FIX ├64 ADDRESS)
┬IT 6: ╥┼╒ ┴──╥┼╙╙ ├╧╬╘╥╧╠ (1 = FIX ╥┼╒ ADDRESS)
┬ITS 5..0: UNUSED (NORMALLY ALL SET)
╔N ORDER TO ACCESS THE ╥┼╒ REGISTERS IN ASSEMBLY LANGUAGE, IT IS CONVENIENT
TO DEFINE LABELS SOMETHING LIKE THIS:
STATUS = $─╞00
COMMAND = $─╞01
C64BASE = $─╞02
REUBASE = $─╞04
TRANSLEN = $─╞07
IRQMASK = $─╞09
CONTROL = $─╞0┴
3) _╚OW ╘O ╥ECOGNIZE ╘HE ╥┼╒_
╬ORMALLY, THE ADDRESSES BETWEEN $─╞02 AND $─╞05 ARE UNUSED, VALUES STORED
THERE GET LOST. ╘HEREFORE, IF E.G. THE VALUES 1,2,3,4 ARE WRITTEN TO
$─╞02..$─╞05 AND DO NOT STAY THERE, NO ╥┼╒ CAN BE CONNECTED. ╚OWEVER, IF THE
VALUES ARE THERE, IT COULD BE CAUSED BY ANOTHER KIND OF MODULE CONNECTED THAT
ALSO USES THESE ADDRESSES.
┴NOTHER PROBLEM IS THE RECOGNITION OF THE NUMBER OF ╥┴═ BANKS (64 ╦┬YTE
UNITS) INSTALLED. ╘HE ╙╔┌┼ BIT ONLY TELLS IF THERE ARE AT LEAST 2 (1700) OR
4 (1764, 1750) BANKS INSTALLED. ┬Y TRYING TO ACCESS AND VERIFY BYTES IN AS
MANY ╥┴═ BANKS AS POSSIBLE, THE REAL SIZE CAN BE DETERMINED. ╘HIS CAN BE
SEEN IN THE SOURCE TO "─YNAMIC MEMORY ALLOCATION FOR THE 128" IN ├OMMODORE
╚ACKING ╔SSUE 2.
╔N ANY WAY, THE USER OF A PROGRAM SHOULD BE ABLE TO CHOOSE, IF AND WHICH ╥┼╒
BANKS ARE TO BE USED.
4) _╙IMPLE ╥┴═ ╘RANSFER_
╓ERY LITTLE OPTIONS OF THE ╥┼╒ ARE NECESSARY FOR THE MAIN PURPOSES OF ╥┴═
EXPANDING. ╩UST SET THE BASE ADDRESSES, TRANSFER LENGTH, AND THEN THE
COMMAND REGISTER.
╘HE FOLLOWING CODE TRANSFERS ONE ╦┬YTE CONTAINING THE SCREEN MEMORY
($0400..$07╞╞) TO ADDRESS 0 IN THE ╥┼╒:
LDA #0
STA CONTROL ; TO MAKE SURE BOTH ADDRESSES ARE COUNTED UP
LDA #<$0400
STA C64BASE
LDA #>$0400
STA C64BASE + 1
LDA #0
STA REUBASE
STA REUBASE + 1
STA REUBASE + 2
LDA #<$0400
STA TRANSLEN
LDA #>$0400
STA TRANSLEN + 1
LDA #%10010000; C64 -> ╥┼╒ WITH IMMEDIATE EXECUTION
STA COMMAND
╔N ORDER TO TRANSFER THE MEMORY BACK TO THE ├64, REPLACE "LDA #%10010000" BY
"LDA #%10010001".
╔ THINK, THIS SUBSET OF 17XX FUNCTIONS WOULD BE ENOUGH FOR A REASONABLE ╥┴═
EXPANSION. ╚OWEVER, IF FULL COMPATIBILITY WITH 17XX ╥┼╒S IS DESIRED, ALSO
THE MORE COMPLICATED FUNCTIONS HAVE TO BE IMPLEMENTED.
5) _┴DDITIONAL ╞EATURES_
╙WAPPING ═EMORY
╫ITH THE SWAP-COMMAND, MEMORY BETWEEN 17XX AND ├64 CAN BE EXCHANGED. ╘HE
PROGRAMMING IS THE SAME AS IN SIMPLE ╥┴═ TRANSFER.
├OMPARING ═EMORY
╬O ╥┴═ IS TRANSFERRED. ╔NSTEAD, THE NUMBER OF BYTES SPECIFIED IN THE TRANSFER
LENGTH REGISTER IS COMPARED. ╔F THERE ARE DIFFERENCES, THE ╞┴╒╠╘ BIT OF THE
STATUS REGISTER IS SET. ╔N ORDER TO GET VALID INFORMATION, THIS BIT HAS TO
BE CLEARED BEFORE COMPARING. ╘HIS IS POSSIBLE BY READING THE STATUS
REGISTER.
╒SING ┴LL ├64 ═EMORY
╬ORMALLY, ├64 MEMORY IS ACCESSED IN THE MEMORY CONFIGURATION SELECTED DURING
WRITING TO THE COMMAND REGISTER. ╔N ORDER TO BE ABLE TO WRITE TO THE COMMAND
REGISTER, THE ╔/╧-AREA HAS TO BE ACTIVE. ╔F ╥┴═ BETWEEN $─000 AND $─╞╞╞ OR
CHARACTER ╥╧═ SHALL BE USED, IT IS POSSIBLE TO DELAY THE EXECUTION OF THE
COMMAND BY USING A COMMAND BYTE WITH BIT 4 ("╞╞00") CLEARED. ╘HE COMMAND
WILL THEN BE EXECUTED WHEN AN ARBITRARY VALUE IS WRITTEN TO ADDRESS $╞╞00.
┼XAMPLE:
< ╙ET BASE ADDRESSES AND TRANSFER LENGTH >
LDA #%10000000 ; TRANSFER ├64 ╥┴═ -> ╥┼╒ DELAYED
STA COMMAND
SEI
LDA $01
AND #$30
STA $01 ; SWITCH ON 64 ╦┬YTE ╥┴═
LDA $╞╞00 ; DO NOT CHANGE THE CONTENTS OF $╞╞00
STA $╞╞00 ; EXECUTE ─═┴
LDA $01
ORA #$37
STA $01 ; SWITCH ON NORMAL CONFIGURATION
CLI
6) _╘RANSFER ╙PEED_
─URING ─═┴ THE ├╨╒ IS HALTED--THE MEMORY ACCESS CYCLES NORMALLY AVAILABLE FOR
THE ├╨╒ ARE NOW USED TO ACCESS ONE BYTE EACH CYCLE. ╘HEREFORE, WITH SCREEN
AND SPRITES SWITCHED OFF, IN EVERY CLOCK CYCLE (985248 PER SECOND ON ╨┴╠
MACHINES) ONE BYTE IS TRANSFERRED. ╔F SCREEN IS ON OR SPRITES ARE ENABLED,
TRANSFER IS A BIT SLOWER, AS THE ╓╔├ SOMETIMES ACCESSES ╥┴═ EXCLUSIVELY.
├OMPARING MEMORY AREAS IS AS FAST AS TRANSFERING. (├OMPARISON IS STOPPED
ONCE THE FIRST DIFFERENCE IS FOUND.) ╙WAPPING MEMORY IS ONLY HALF AS FAST,
BECAUSE TWO ├64 MEMORY ACCESSES PER BYTE (READ & WRITE) ARE NECESSARY.
7) _╔NTERRUPTS_
┬Y SETTING CERTAIN BITS IN THE INTERRUPT MASK REGISTER, ╔╥╤S AT THE END OF A
─═┴ CAN BE SELECTED. ╚OWEVER, AS THE ├╨╒ IS HALTED DURING ─═┴, A TRANSFER OR
COMPARISION WILL ALWAYS BE FINISHED AFTER THE STORE INSTRUCTION INTO THE
COMMAND REGISTER OR $╞╞00. ╘HEREFORE, THERE IS NO NEED TO CHECK FOR AN "┼╬─
╧╞ ┬╠╧├╦" (BIT 6 OF STATUS REGISTER) OR TO ENABLE AN INTERRUPT.
8) _┼XECUTING ├ODE ╔N ┼XPANDED ═EMORY_
├ODE IN EXPANDED MEMORY HAS TO BE COPIED INTO ├64 MEMORY BEFORE EXECUTION.
╘HIS IS A DISADVANTAGE AGAINST BANK SWITCHING SYSTEMS. ╚OWEVER, BANK
SWITCHING CAN BE SIMULATED BY THE ╙╫┴╨ COMMAND. ╘HIS IS DONE E.G. IN ╥┴═─╧╙.
╘HERE, ONLY 256 BYTES OF ├64 MEMORY ARE OCCUPIED, THE 8 ╦┬YTE ╥┴═ DISK DRIVER
IS SWAPPED IN WHENEVER NEEDED. ╘OO MUCH SWAPPING IS ONE REASON FOR ╥┴═─╧╙ TO
BE RELATIVELY SLOW AT SEQUENTIAL FILE ACCESS.
9) _╧THER ╒SEFUL ┴PPLICATIONS ╧F ╘HE ╥┼╒_
╘HE ╥┼├ IS NOT ONLY USEFUL FOR ╥┴═ TRANSFER AND COMPARISON.
╧NE OTHER APPLICATION (USED IN ╟┼╧╙) IS COPYING ├64 ╥┴═ AREAS BY FIRST
TRANSFERRING THEM TO THE ╥┼╒ AND THEN TRANSFERRING THEM BACK INTO THE DESIRED
POSITION IN ├64 MEMORY. ─UE TO THE FAST ─═┴, THIS IS ABOUT 5 TIMES FASTER
THAN COPYING MEMORY WITH MACHINE LANGUAGE INSTRUCTIONS.
╔NTERESTING THINGS CAN BE DONE BY FIXING BASE ADDRESSES: ┬Y FIXING THE ╥┼╒
BASE ADDRESS, LARGE ├64 AREAS CAN BE FAST FILLED WITH A SINGLE BYTE VALUE.
╔T IS ALSO POSSIBLE TO FIND THE END OF AN AREA CONTAINING EQUAL BYTES VERY
FAST, E.G. FOR DATA COMPRESSION.
╞IXING THE ├64 BASE ADDRESS IS INTERESTING IF IT POINTS TO AN ╔/╧-PORT.
╘HEN, DATA CAN BE WRITTEN OUT FASTER THAN NORMALLY POSSIBLE. ╔T WOULD BE
POSSIBLE TO USE REAL BITMAP GRAPHICS IN THE UPPER AND LOWER SCREEN BORDER BY
CHANGING THE "MAGIC BYTE" (BYTE WITH THE HIGHEST ADDRESS ACCESSABLE BY THE
╓╔├) IN EVERY CLOCK CYCLE. ╘HEREFORE, OF COURSE, THE VERTICAL BORDER WOULD
HAVE TO BE SWITCHED OFF.
╟ENERALLY THE ╥┼├ COULD BE USED AS GRAPHICS ACCELERATOR, E.G. TO COPY BITMAP
AREAS OR OTHER DISPLAY DATA FAST INTO THE ╓╔├-ADDRESSABLE 16 ╦┬YTE AREA.
10) _├OMPARISION ╧F ┬ANK ╙WITCHING AND ─═┴_
╫HEN COMPARING BANK SWITCHING AND ─═┴ FOR MEMORY EXPANSION, ╔ THINK, ─═┴ IS
THE MORE COMFORTABLE METHOD TO PROGRAM. ╔T IS ALSO FASTER IN MOST CASES.
╘HE DISADVANTAGE OF CODE EXECUTION NOT POSSIBLE IN EXTERNAL MEMORY CAN BE
MINIMIZED BY ALWAYS COPYING ONLY THE NECESSARY PARTS INTO ├64 MEMORY.
┼XECUTING THE CODE WILL THEN TAKE MUCH MORE TIME THAN COPYING IT INTO ├64
MEMORY.
=============================================================================
┴ ─IFFERENT ╨ERSPECTIVE: ╘HREE-─IMENSIONAL ╟RAPHICS ON THE ├64
BY ╙TEPHEN ╩UDD (JUDD@MERLE.ACNS.NWU.EDU) AND
╟EORGE ╘AYLOR (YURIK@IO.ORG)
╔NTRODUCTION
------------
╫E'VE ALL SEEN THEM: NEAT-LOOKING THREE-DIMENSIONAL GRAPHICS TUMBLING AROUND
ON A COMPUTER. ┬UT HOW IS IT DONE? ╔N PARTICULAR, HOW WOULD YOU DO IT ON A
├OMMODORE-64? ╬OWADAYS THE TYPICAL ANSWER TO THE FIRST QUESTION IS "╩UST
USE THE FUNCTIONS IN 3DGRPHCS.LIB" (OR "┬EATS ME."). ╘HE ANSWER TO THE
SECOND IS EITHER "╫ELL AN ELITE CODER LIKE ME CAN'T LET SECRETS LIKE THAT
OUT" OR ELSE "╫HAT, YOU MEAN PEOPLE STILL USE THOSE THINGS?"
╙O THIS IS A LITTLE ARTICLE WHICH ATTEMPTS TO TAKE SOME OF THE MYSTERY OUT
OF THREE DIMENSIONAL GRAPHICS. ═OST OF THE MATHEMATICS INVOLVED ARE VERY
SIMPLE, AND THE GEOMETRIC CONCEPTS ARE VERY INTUITIVE. ├ODING IT UP ON A
├-64 IS MORE OF A CHALLENGE, ESPECIALLY WHEN YOU WANT TO MAKE IT FAST, BUT
EVEN THEN IT'S NOT TOO TOUGH. ╟EORGE AND ╔ WROTE THE CODE IN ABOUT A WEEK
(AND TALKED ABOUT IT FOR ABOUT A WEEK BEFORE THAT). ╨ERHAPS YOU WILL
APPRECIATE THIS ASPECT MORE IF YOU KNOW THAT ╔ HAVEN'T WRITTEN 6510 CODE
SINCE 1988, AND UNTIL THE LAST TWO DAYS ╟EORGE HAD NO COMPUTER ON WHICH TO
TEST HIS IDEAS (AND ON THE LAST DAY IT DIED)!
╘HE GOAL OF THIS ARTICLE IS THAT BY THE TIME YOU REACH THE END OF IT YOU
WILL BE ABLE TO DO YOUR OWN COOL-LOOKING 3D GRAPHICS ON A ├64. ╙OME OF YOU
MAY FIND IT PATRONIZING AT TIMES, BUT ╔ HOPE THAT IT IS AT A LEVEL THAT
EVERYONE CAN ENJOY AND LEARN SOMETHING FROM. ┴ND FEEL FREE TO WRITE TO US!
╘HE FIRST PART EXPLAINS SOME OF THE FUNDAMENTAL THEORETICAL CONCEPTS
INVOLVED. ═OSTLY WHAT IS REQUIRED IS SOME GEOMETRIC IMAGINATION, ALTHOUGH
YOU NEED TO KNOW A LITTLE TRIGONOMETRY, AS WELL AS HOW TO MULTIPLY TWO
MATRICES TOGETHER.
╘HE SECOND PART DEALS WITH IMPLEMENTING THE ALGORITHMS ON A COMPUTER; SINCE
THIS IS ├=╚ACKING, IT IS A GOOD ASSUMPTION THAT THE IMPLEMENTATION IS ON THE
├-64! ═OST OF THE CODE IS DESIGNED FOR SPEED, AND LOTS OF IT IS ALSO
DESIGNED SO THAT IT CAN BE CALLED FROM ┬┴╙╔├!
╞INALLY, AN EXAMPLE PROGRAM WHICH USES ALL OF THE TECHNIQUES PRESENTED HERE
IS INCLUDED, INCLUDING SOURCE. ╘HE PROGRAM ROTATES A CUBE IN THREE
DIMENSIONS.
┬Y ITSELF THE CODE IS NOT THE FASTEST IN THE WORLD; WHAT IS IMPORTANT HERE
ARE THE CONCEPTS. ╫ITH A LITTLE FIDDLING, AND MAYBE SOME LOOP UNROLLING,
YOU CAN GET THESE ROUTINES GOING QUITE FAST; FOR INSTANCE, A 26 CYCLE LINE
DRAWING ROUTINE IS NOT HARD AT ALL USING MORE SOPHISTICATED VERSIONS OF
THESE ALGORITHMS. ╘HIS TIME AROUND THE CODE IS DESIGNED FOR CLARITY OVER
QUALITY.
╘HERE ARE LOTS AND LOTS OF LITTLE DETAILS THAT ARE NOT SPECIFICALLY COVERED
BY THIS ARTICLE. ┬UT IF YOU UNDERSTAND ALL OF THE CONCEPTS HERE IT
SHOULDN'T BE TOO HARD TO FIGURE OUT THE PROBLEM WHEN SOMETHING GOES WRONG.
╘HIS MATERIAL IS THE RESULT OF A WEEK'S WORTH OF DISCUSSIONS ON COMP.SYS.CBM
BETWEEN ╟EORGE, MYSELF, AND SEVERAL OTHER PEOPLE. ╙O A BIG THANK YOU TO
EVERYONE WHO HELPED US TO KNOCK THESE IDEAS OUT, AND WE HOPE YOU FIND THIS
TO BE A USEFUL REFERENCE!
╔NCIDENTALLY, THE IDEAS AND TECHNIQUES IN THIS ARTICLE AREN'T JUST FOR
DRAWING NEAT PICTURES; FOR EXAMPLE, A GOOD APPLICATION IS THE STABILIZATION
OF AN ORBITING SATELLITE. ╘HE MATHEMATICAL IDEAS BEHIND LINEAR
TRANSFORMATIONS ARE IMPORTANT IN, FOR INSTANCE, THE STUDY OF DYNAMICAL
SYSTEMS (WHICH LEADS TO ├HAOS AND ALL SORTS OF ADVANCED MATHEMATICAL
SUBJECTS).
┬UT IT ALSO MAKES YOU LOOK REALLY COOL IN FRONT OF YOUR FRIENDS.
╞IRST ╘HINGS ╞IRST
------------------
┬EFORE WE BEGIN, YOU ARE GOING TO HAVE TO GET A FEW IDEAS INTO YOUR HEAD.
╞IRST AND FOREMOST IS THE COORDINATE SYSTEM WE WILL BE USING: A RIGHT-HANDED
COORDINATE SYSTEM. ╔N OUR SYSTEM, THE X-AXIS IS GOING TO COME OUT TOWARDS
YOU, THE Y-AXIS IS GOING TO GO TO YOUR RIGHT, AND THE Z-AXIS IS GOING TO GO
"UP".
╙ECOND, YOU NEED TO KNOW A LITTLE MATH. ┘OU NEED TO KNOW ABOUT POLAR
COORDINATES, AND YOU NEED TO KNOW HOW TO MULTIPLY TWO MATRICES TOGETHER.
╘HE IDEAS ARE ALL GEOMETRIC, BUT THE COMPUTATIONS ARE ALL (OF COURSE)
MATHEMATICAL.
╬OW, LET US START THINKING ABOUT A CUBE!
╠ET'S FIRST CENTER OUR CUBE AT THE ORIGIN. ╬OT ONLY DOES THIS MAKE IT EASY
TO VISUALIZE, BUT TO MAKE OUR CUBE DO THINGS (LIKE ROTATE) THE WAY WE WANT
IT TO WE ARE GOING TO HAVE TO REQUIRE THIS. ┴ CUBE HAS EIGHT CORNERS, ALL
CONNECTED TO EACH OTHER IN A PARTICULAR WAY.
╘HERE'S NO REASON TO MAKE THINGS COMPLICATED ALREADY, SO LET'S PUT THE
CORNERS OF THE CUBE AT X=+/-1, Y=+/-1, AND Z=+/-1. ╘HIS GIVES US EIGHT
POINTS TO WORK WITH: ╨1=[1 1 1] ╨2=[1 -1 1] ╨3=[-1 -1 1] ETC.
═INIMALISTS MAY DISAGREE, BUT A CUBE ALL BY ITSELF ISN'T ALL THAT EXCITING.
╙O HOW DO WE DO STUFF TO IT? ╞OR THAT MATTER, WHAT KINDS OF STUFF CAN WE DO
TO IT?
╥OTATIONS IN THE ╨LANE
----------------------
╧NE OF THE COOL THINGS TO DO WITH A THREE-DIMENSIONAL OBJECT IS OF COURSE TO
ROTATE IT. ╘O UNDERSTAND HOW TO DO THIS, WE NEED TO FIRST LOOK AT ROTATIONS
IN THE PLANE. ┴ LITTLE LATER ON, THIS ARTICLE IS GOING TO ASSUME YOU KNOW
HOW TO MULTIPLY TWO MATRICES TOGETHER.
┬EFORE STARTING, WE NEED TO KNOW SOME IMPORTANT TRIG FORMULAS (OF COURSE,
EVERYONE KNOWS IMPORTANT FORMULAS LIKE THESE, BUT LET ME JUST REMIND YOU OF
THEM):
COS(┴+┬) = COS(┴)COS(┬) - SIN(┴)SIN(┬)
SIN(┴+┬) = COS(┴)SIN(┬) + SIN(┴)COS(┬)
╠ET US TAKE A LOOK AT ROTATIONS IN THE PLANE; THAT IS, IN TWO DIMENSIONS.
╘HINK OF THE TYPICAL X-Y AXIS. ╠ET'S SAY THAT WE HAVE A POINT AT [X1 Y1]
AND WANT TO ROTATE IT BY AN ANGLE ┬, ABOUT THE ORIGIN, SO THAT WE END UP AT
THE ROTATED COORDINATE [X2 Y2]. ╫HAT ARE X2 AND Y2? ╘HE EASIEST WAY TO
FIND THEM IS TO USE POLAR COORDINATES.
╫E CAN WRITE THE POINT [X1 Y1] AS THE POINT (R,T), WHERE R IS THE DISTANCE
FROM THE ORIGIN TO THE POINT, AND T IS THE ANGLE FROM THE X-AXIS, MEASURED
COUNTER-CLOCKWISE. ╘HEREFORE, X1 = R*COS(T) AND Y1=R*SIN(T). ╔F WE THEN
ROTATE THIS VECTOR BY AN AMOUNT ┬,
X2 = R*COS(T+┬)
= R*(COS(T)COS(┬) - SIN(T)SIN(┬))
= X1*COS(┬) - Y1*SIN(┬).
╙IMILARLY,
Y2 = R*SIN(T+┬) = X1*SIN(┬) + Y1*COS(┬).
╔N MATRIX FORM, THIS CAN BE WRITTEN AS
[X2] = [COS(┬) -SIN(┬)] [X1]
[Y2] [SIN(┬) COS(┬)] [Y1]
╚OW DO WE EXTEND THIS TO THREE DIMENSIONS? ┼ASY. ╘HE KEY THING TO REALIZE
HERE IS THAT, IN THREE DIMENSIONS, THE ABOVE ROTATIONS ARE REALLY ROTATIONS
ABOUT THE Z-AXIS. ┴T ANY POINT ALONG THE Z-AXIS WE COULD TAKE A THIN SLICE
OF THE THREE-DIMENSIONAL SPACE (SO THAT OUR SLICE IS PARALLEL TO THE X-Y
AXIS) AND PRETEND THAT WE ARE REALLY IN TWO-DIMENSIONAL SPACE. ╘HEREFORE,
TO ROTATE A POINT ABOUT THE Z-AXIS THE X- AND Y-EQUATIONS ARE THE SAME AS
ABOVE, AND THE Z-COORDINATE STAYS FIXED. ╔N MATRIX FORM THIS IS
[X2] [COS(┬) -SIN(┬) 0] [X1]
[Y2] = [SIN(┬) COS(┬) 0] [Y1]
[Z2] [ 0 0 1] [Z1]
╙IMILARLY, IT IS EASY TO SEE THAT
[X2] [ 1 0 0 ] [X1]
[Y2] = [ 0 COS(┬) -SIN(┬)] [Y1]
[Z2] [ 0 SIN(┬) COS(┬)] [Z1]
IS A ROTATION ABOUT THE X-AXIS, AND THAT
[X2] [COS(┬) 0 SIN(┬)] [X1]
[Y2] = [ 0 1 0 ] [Y1]
[Z2] [-SIN(┬) 0 COS(┬)] [Z1]
IS A ROTATION ABOUT THE Y-AXIS. ┘OU MAY HAVE NOTICED THAT THE SIGNS OF
SIN(┬) HAVE BEEN REVERSED; THIS IS BECAUSE IN OUR RIGHT-HANDED COORDINATE
SYSTEM THE Z-X PLANE IS "BACKWARDS": IN THE Z-X PLANE X INCREASES TO THE
LEFT, WHILE Z INCREASES "UP".
┘OU MAY BE WONDERING WHY WE WRITE THIS ALL IN MATRIX FORM. ╘HE ABOVE MATRIX
EQUATIONS ARE CALLED LINEAR TRANSFORMATIONS OF THE VECTOR [X1 Y1 Z1]. ╘HERE
ARE LOTS OF DEEP MATHEMATICAL CONCEPTS SITTING RIGHT BEHIND WHAT LOOKS TO BE
AN EASY WAY OF WRITING SEVERAL EQUATIONS. ┼NTIRE BOOKS ARE WRITTEN ON THE
SUBJECT, AND THAT IS AS GOOD A REASON AS ANY FOR ME NOT TO GO INTO DETAIL.
┬UT WRITING THINGS IN THIS WAY ALSO OFFERS US SEVERAL _COMPUTATIONAL_
ADVANTAGES. ╥OTATIONS AREN'T THE ONLY LINEAR TRANSFORMATIONS; LET'S SAY
THAT ╔ WANT TO ROTATE A POINT ABOUT THE X-AXIS, SHEAR IT IN THE Y-DIRECTION,
REFLECT IT THROUGH THE LINE THETA=PI/5, AND ROTATE IT THROUGH THE Z-AXIS.
┘OU COULD HAVE ONE SUBROUTINE WHICH DID THE ROTATION, AND ONE THAT DID THE
SHEAR, ETC. ┬UT BY WRITING IT IN MATRIX FORM, THE ENTIRE PROCESS IS SIMPLY
A SERIES OF MATRIX MULTIPLICATIONS.
╔F YOU THINK ABOUT IT YOU MIGHT REALIZE THAT IT REALLY IS THE SAME THING NO
MATTER WHICH WAY YOU DO IT, BUT THERE IS A FUNDAMENTAL DIFFERENCE IN THE
VIEWPOINT OF EACH METHOD: ONE VIEWS IT AS A SERIES OF UNRELATED MATHEMATICAL
OPERATIONS EACH WITH IT'S OWN INDIVIDUAL FUNCTION, WHILE THE OTHER METHOD
VIEWS IT AS A SERIES OF MATRIX MULTIPLICATIONS SO THAT IT'S BASICALLY THE
SAME THING, OVER AND OVER.
╫HAT THIS MEANS FOR YOU IS THAT IF YOU WANT TO ROTATE A POINT AROUND THE
X-AXIS, THE Y-AXIS, AND THE Z-AXIS, YOU CAN TAKE THE MATRIX FOR EACH
TRANSFORMATION AND MULTIPLY THEM ALL TOGETHER, AND THEN APPLY THIS ONE BIG
MATRIX TO THE POINT. ╧NE THING TO BE VERY AWARE OF: IN GENERAL, MATRIX
MULTIPLICATION IS NOT COMMUTATIVE. ╘HAT IS, IF ╪ IS A ROTATION MATRIX ABOUT
THE X-AXIS AND ┘ IS A ROTATION ABOUT THE Y-AXIS, IT WILL ALMOST NEVER BE
TRUE THAT ╪┘ = ┘╪. ╫HAT THIS MEANS GEOMETRICALLY IS THAT IF YOU TAKE A
POINT, ROTATE IT AROUND THE X-AXIS BY AN AMOUNT ┴, THEN ROTATE IT AROUND THE
Y-AXIS BY AN AMOUNT ┬, YOU WILL USUALLY END UP AT A DIFFERENT POINT THAN IF
YOU FIRST ROTATE IT AROUND THE Y-AXIS.
╔F YOU ARE INTERESTED IN LEARNING MORE ABOUT ROTATIONS AND THEIR USES, A
GOOD PLACE TO START IS ALMOST ANY BOOK ON MECHANICS, FOR INSTANCE "├LASSICAL
═ECHANICS" BY ╟OLDSTEIN. ╔F YOU WANT TO LEARN MORE ABOUT LINEAR
TRANSFORMATIONS YOU CAN FIND IT IN ANY DECENT BOOK ON LINEAR ALGEBRA, AS
WELL AS IN A LOT OF PHYSICS TEXTS. ╘HERE IS A GOOD INTRODUCTION IN ═ARGENAU
AND ═URPHY "╘HE ═ATHEMATICS OF ╨HYSICS AND ├HEMISTRY", AND THERE IS A
SEMI-╧╦ BOOK ON LINEAR ALGEBRA BY ╟OLDBERG.
╬OW WE KNOW THE GEOMETRIC AND MATHEMATICAL PRINCIPLES BEHIND ROTATIONS IN
THREE DIMENSIONS. ┬UT WE WANT TO VISUALIZE THIS ON A COMPUTER, ON A
TWO-DIMENSIONAL SCREEN: WE NEED SOME WAY OF TAKING A POINT IN
THREE-DIMENSIONS AND BRINGING IT DOWN TO TWO DIMENSIONS, BUT IN A WAY THAT
FOOLS US INTO THINKING THAT IT REALLY IS THREE-DIMENSIONAL.
╫HAT WE NEED ARE PROJECTIONS.
╨ROJECTIONS
-----------
╬OW, WE COULD JUST DO A SIMPLE PROJECTION AND SET THE Z-COORDINATE EQUAL TO
ZERO, BUT IN DOING SO WE HAVE ELIMINATED SOME OF THE INFORMATION, AND IT
WON'T LOOK VERY THREE-DIMENSIONAL TO OUR EYES. ╙O WE NEED TO THINK OF A
BETTER METHOD.
╙IT BACK IN YOUR CHAIR AND IMAGINE FOR A MINUTE OR TWO. ╔MAGINE THE THREE
COORDINATE AXES. ╬OW IMAGINE THAT THERE IS A PINHOLE CAMERA, WITH IT'S
PINHOLE LENS AT THE ORIGIN, AND IT'S FILM AT THE PLANE AT Z=1 PARALLEL TO
THE X-Y PLANE. ╬OW WE ARE GOING TO TAKE A SNAPSHOT OF SOMETHING.
═AYBE A LITTLE PICTURE WOULD HELP:
▄
▄
/▄
LENS / ▄FILM
-----*--▄------------ Z-AXIS
/ ▄
/ ▄
/ Z=1
OBJECT :-) (THEN AGAIN, MAYBE IT WON'T!)
╫HAT DOES THIS OBJECT LOOK LIKE ON THE FILM?
╠ET'S SAY ONE OF THE POINTS OF THIS SOMETHING IS [X Y Z]. ╫HERE DOES THIS
POINT COME OUT ON THE FILM? ╙INCE THE LENS IS AT THE ORIGIN, WE WANT TO
DRAW THE LINE FROM [X Y Z] THROUGH THE ORIGIN (SINCE THAT'S WHERE OUR LENS
IS) AND FIND THE POINT [X1 Y1 1] WHERE IT HITS THE FILM. ╘HE PARAMETRIC
EQUATION OF THIS LINE IS
T * [X Y Z]
SO THAT WE WANT TO FIND THE INTERSECTION OF THIS LINE AND THE FILM:
T * [X Y Z] = [X1 Y1 1].
╘HE Z-COORDINATE TELLS US THAT T*Z=1, OR T=1/Z. ╔F WE THEN SUBSTITUTE THIS
IN THE ABOVE EQUATION, WE FIND THAT
X1 = X/Z Y1 = Y/Z
╔F, INSTEAD OF PLACING THE FILM AT Z=1 WE PLACE IT AT Z=D, WE GET
X1 = D*X/Z Y1 = D*Y/Z
╘HESE THEN ARE THE PROJECTION EQUATIONS. ╟EOMETRICALLY YOU CAN SEE THAT BY
CHANGING D ALL YOU WILL DO IS TO "MAGNIFY" THE OBJECT ON THE FILM. ┴NYONE
WHO HAS WATCHED AN ECLIPSE WITH A LITTLE PINHOLE CAMERA HAS SEEN THIS.
┬Y THE WAY, IF YOU STARE AT THE ABOVE PICTURE FOR A WHILE, YOU MAY REALIZE
THAT, IN THAT GEOMETRIC MODEL, THE OBJECT GETS TURNED UPSIDE-DOWN ON THE
FILM.
╬OW THAT WE HAVE A PHYSICAL MODEL OF THE EQUATIONS THAT HAVE BEEN THROWN
AROUND, LET'S LOOK AT WHAT WE'VE BEEN DOING.
├ONSIDER A CUBE CENTERED AT THE ORIGIN. ┴LREADY THERE IS A PROBLEM ABOVE IF
Z=0. ╫HAT IF ONE SIDE OF THE CUBE HAS PART OF IT'S FACE BELOW THE X-Y PLANE
(NEGATIVE Z) AND PART ABOVE THE X-Y PLANE? ╔F YOU DRAW ANOTHER PICTURE AND
TRACE RAYS THROUGH THE ORIGIN, YOU'LL SEE ONE PART OF THE FACE AT ONE END OF
THE FILM (NEGATIVE Z, SAY), AND THE OTHER PART WAY THE HECK OUT AT THE OTHER
END! ┴ND THE TWO PARTS DON'T TOUCH, EITHER!
╙O WE NEED TO BE CAREFUL. ╔N THE GEOMETRIC PICTURE ABOVE, WE ASSUMED THE
OBJECT WAS A FAIR DISTANCE AWAY FROM THE LENS. ├URRENTLY WE HAVE OUR LENS
AT THE CENTER OF OUR CUBE, SO SOMETHING NEEDS TO MOVE! ╙INCE ROTATIONS ARE
DEFINED ABOUT THE ORIGIN WE CAN'T JUST REDEFINE THE CUBE SO THAT THE
VERTICES ARE OUT AT, SAY, Z=2 AND Z=3. ╙O WHAT WE NEED TO DO IS TO MOVE THE
CAMERA AWAY FROM THE CUBE. ╧R, IF YOU WANT TO THINK OF IT ANOTHER WAY, WE
NEED TO MOVE THE CUBE AWAY FROM THE CAMERA BEFORE WE TAKE A PICTURE OF IT.
╔N THIS CASE THE TRANSLATION NEEDS TO BE DONE IN THE Z-DIRECTION. ╘HE NEW
PROJECTION EQUATIONS ARE THEN
X1 = D*X/(Z-Z0) Y1 = D*Y/(Z-Z0)
╫HERE Z0 IS A TRANSLATION AMOUNT THAT AT THE VERY LEAST MAKES SURE THAT
Z-Z0 < 0.
╬OW NOT ONLY HAVE WE ELIMINATED POSSIBLE PROBLEMS WITH DIVIDING BY ZERO, BUT
THE MATHEMATICS NOW MATCH THE PHYSICAL MODEL.
╙OME OF YOU MIGHT WANT TO THINK ABOUT THE LESS-PHYSICAL SITUATION OF PUTTING
THE OBJECT _BEHIND_ THE FILM, I.E. TO THE RIGHT OF THE FILM IN THE ABOVE
PICTURE.
┴S USUAL, THERE ARE SOME DEEPER MATHEMATICS LURKING BEHIND THESE EQUATIONS,
CALLED PROJECTIVE GEOMETRY. ╫ALTER ╘AYLOR HAS WRITTEN A BOOK WITH A FINE
INTRODUCTION TO THE SUBJECT (AT LEAST, ╔ THINK THE BOOK WAS PUBLISHED; MY
COPY IS AN OLD PREPRINT).
╔MPLEMENTATION
--------------
╬OW THAT WE'VE GOT THE THEORY UNDER OUR BELT, WE NEED TO THINK ABOUT
IMPLEMENTING IT ON THE COMPUTER. ┴S A CONCESSION TO ALL THE PROGRAMMERS WHO
IMMEDIATELY SKIPPED TO THIS SECTION, MOST OF THE DISCUSSION WILL BE AT A
REASONABLY HIGH LEVEL.
╧NE THING YOU NEED TO UNDERSTAND IS 8-BIT SIGNED AND UNSIGNED NUMBERS. ╚ERE
IS A QUICK REVIEW: AN 8-BIT UNSIGNED NUMBER RANGES FROM 0..255. ┴N 8-BIT
SIGNED NUMBER RANGES FROM -128..127 AND IS WRITTEN IN TWO'S-COMPLEMENT FORM.
╔N AN 8-BIT TWO'S-COMPLEMENT NUMBER BITS ZERO THROUGH SIX WORK LIKE THEY
USUALLY DO, BUT THE SEVENTH (HIGH) BIT REPRESENTS THE SIGN OF THE NUMBER IN
A SPECIAL WAY. ╘O FIND THE 8-BIT TWO'S-COMPLEMENT OF A NUMBER SUBTRACT IT
FROM 256. ┼XAMPLE: WHAT IS -21 IN TWO'S COMPLEMENT NOTATION? ╔T IS 256-21
= 235 = $┼┬. ╫HAT IS THE COMPLEMENT OF -21? ╔T IS 256-235 = 21 -- LIKE
MAGIC. ┴NOTHER WAY TO THINK ABOUT IT IS LIKE A TAPE COUNTER: 2 IS $02, 1 IS
$01, 0 IS $00, -1 IS $╞╞, -2 IS $╞┼, ETC. ┴ND WHAT IS 24-21 IN TWO'S
COMPLEMENT? ╔T IS: 24 + -21 = $┼┼ + $┼┬ = $0103. ╘HROW AWAY THE CARRY
(SUBTRACT 256) AND WE COME OUT WITH... $03!
╧NWARDS!
╞IRST, WE NEED TO DECIDE WHAT LANGUAGE TO USE. ┘OU AND ╔ BOTH KNOW THE
ANSWER HERE: ┬┴╙╔├! ╧R MAYBE NOT. ╫E NEED SPEED HERE, AND SPEED ON A
├OMMODORE 64 IS SPELLED A-S-S-E-M-B-L-Y.
╬EXT, WE NEED TO DECIDE WHAT KIND OF MATH WE WANT TO USE, SIGNED OR
UNSIGNED. ╙INCE THE COSINES AND SINES ARE GOING TO GENERATE NEGATIVE AND
POSITIVE NUMBERS IN FUNNY WAYS, WE DEFINITELY WANT TO USE SIGNED NUMBERS.
╘HE ALTERNATIVE IS TO HAVE LOTS OF CODE AND OVERHEAD TO HANDLE ALL THE
CASES, AND IF WE PUT IT IN TWO'S-COMPLEMENT FORM THE COMPUTER DOES MOST OF
THE WORK FOR US.
╚OW BIG SHOULD THE NUMBERS BE? ╙INCE WE ARE GOING FOR SPEED HERE, THE
OBVIOUS CHOICE IS 8-BITS. ┬UT THIS RESTRICTS US TO NUMBERS BETWEEN
-128..127, IS THAT ╧╦? ╘HE SIZE OF OUR GRID IS 0..127 X 0..127, SO THIS IS
PERFECT! ┬UT IT DOES MEAN THAT WE NEED TO BE VERY CAREFUL. ╞OR INSTANCE,
CONSIDER THE EXPRESSION (A+B)/2. ╫HAT HAPPENS IF A=B=64? ╘HESE ARE TWO
NUMBERS WITHIN OUR RANGE OF NUMBERS, AND THE EXPRESSION EVALUATES TO 64,
WHICH IS ALSO IN OUR RANGE, ┬╒╘: IF YOU EVALUATE THE ABOVE IN TWO'S
COMPLEMENT FORM, YOU WILL FIND DIFFERENT ANSWERS DEPENDING ON HOW YOU
EVALUATE IT (I.E. (A+B)/2 WILL NOT GIVE THE SAME ANSWER AS A/2 + B/2, WHICH
WILL GIVE THE CORRECT ANSWER).
╬OW WE'VE GOT ANOTHER PROBLEM: SINE AND COSINE RANGE BETWEEN NEGATIVE ONE
AND ONE. ╘O REPRESENT THESE FLOATING POINT NUMBERS AS 8-BIT SIGNED INTEGERS
THE IDEA WILL BE TO MULTIPLY ALL FLOATING POINT NUMBERS BY A FIXED AMOUNT.
╘HAT IS, INSTEAD OF DEALING WITH THE NUMBER 0.2, WE USE THE NUMBER 64*0.2 =
12.8 = 13, AND DIVIDE THE END RESULT BY 64. ┴S USUAL, WE ARE TRADING
ACCURACY FOR SPEED, ALTHOUGH IT WILL TURN OUT TO MAKE LITTLE DIFFERENCE
HERE.
╫HY DID ╔ PICK 64? ╧BVIOUSLY WE WANT TO PICK SOME FACTOR OF TWO TO MAKE THE
DIVISION AT THE END SIMPLE (JUST AN ╠╙╥). 128 IS TOO BIG. 32 DOESN'T GIVE
US MUCH ACCURACY. ╫E ALSO HAVE TO CONSIDER PROBLEMS IN EXPRESSION
EVALUATION (SEE THE ABOVE EXAMPLE OF (A+B)/2), BUT AS WE SHALL SEE 64 WILL
WORK OUT NICELY.
╬OW THAT WE HAVE ACCOMPLISHED THE DIFFICULT TASK OF DECISION MAKING, WE NOW
NEED TO MOVE ON TO THE SIMPLE TASK OF IMPLEMENTATION, STARTING WITH
ROTATIONS.
╔MPLEMENTATION: ╥OTATIONS
-------------------------
╫E'VE GOT SOME MORE HEAVY-DUTY DECISION MAKING AHEAD OF US. ╫E COULD
IMPLEMENT THIS IS SEVERAL WAYS. ╫E COULD APPLY EACH ROTATION INDIVIDUALLY,
THAT IS, WE COULD ROTATE AROUND THE Z-AXIS, THEN USE THESE ROTATED POINTS
AND ROTATE THEM AROUND THE Y-AXIS, ETC.
╫ELL, YES, THAT WOULD WORK, BUT... EACH ROTATION IS NINE MULTIPLICATIONS.
┼ACH MULTIPLICATION INVOLVES A LOT OF WORK, PLUS WE HAVE TO SHIFT THE RESULT
BY OUR FIXED AMOUNT EACH TIME. ╫E WOULD NOT ONLY BE USING HUGE AMOUNTS OF
TIME, BUT WE WOULD LOSE A LOT OF ACCURACY IN THE PROCESS. ├OMPUTATIONALLY
SPEAKING, THIS IS CALLED A "BAD IDEA".
╧NCE AGAIN, MATHEMATICS SAVES THE DAY: HERE IS WHERE WE GET THE PAYOFF FOR
WRITING THE EQUATIONS AS AN ALGEBRAIC SYSTEM (A MATRIX). ╔F ╪ IS THE
TRANSFORMATION AROUND THE X-AXIS, ┘ THE TRANSFORMATION AROUND THE Y-AXIS,
AND ┌ THE TRANSFORMATION AROUND THE Z-AXIS, THEN THIS IS THE EQUATION TO
TRANSFORM A VECTOR V BY ROTATING THE POINT FIRST AROUND THE Z-AXIS, THEN THE
Y-AXIS, THEN THE X-AXIS:
╪┘┌V = V'
WHERE V' IS THE NEW POINT AFTER ALL THE ROTATION TRANSFORMATIONS. (┘OU MIGHT
CALL IT A CONFLAGRATION OF ROTATION TRANSFORMATIONS). ╬OW THE MAGIC OF
LINEAR ALGEBRA BEGINS TO WORK: OPERATIONS ARE ASSOCIATIVE, WHICH IS A FANCY
WAY OF SAYING THAT (┴┬)├ = ┴(┬├); ╞OR US THIS MEANS THAT ╔ CAN MULTIPLY ALL
THREE MATRICES ╪ ┘ AND ┌ TOGETHER TO GET A SINGLE NEW MATRIX ═:
═ = ╪┘┌
═V= V'
"┬UT," YOU MAY SAY, "WE HAVE TO DO THE SAME NUMBER OF MULTIPLICATIONS TO GET
═ AS WE DO TO APPLY EACH ROTATION SEPARATELY! ╚OW IS THIS SUPPOSED TO
HELP?" ╘HIS IS HOW IT IS SUPPOSED TO HELP:
1) ╫E NOW HAVE A SINGLE MATRIX WHICH DESCRIBES ┴╠╠ THE ROTATIONS.
╞OR A SINGLE POINT WE HAVEN'T GAINED MUCH, BUT IF WE HAVE
A LOT OF POINTS (AND A CUBE HAS EIGHT), TRANSFORMING EVERY
POINT IS NOW A SINGLE MATRIX MULTIPLICATION. ╔N OTHER WORDS,
IF WE HAVE A LOT OF POINTS TO TRANSFORM WE GET A ╚╒╟┼ SAVINGS
COMPUTATIONALLY.
2) ╫E CAN TAKE ADVANTAGE OF TRIGONOMETRIC IDENTITIES AND IN SO
DOING MAKE THE COMPUTATION OF ═ VERY SIMPLE.
├OMPUTATIONALLY SPEAKING, THIS IS KNOWN AS A "GOOD IDEA".
╘O MULTIPLY THE THREE ROTATION MATRICES TOGETHER, WE NEED TO TAKE ADVANTAGE
OF A FEW TRIGONOMETRIC PROPERTIES. ╫E NEED THE TWO IDENTITES MENTIONED
EARLIER:
SIN(A+B) = SIN(A)COS(B) + COS(A)SIN(B)
COS(A+B) = COS(A)COS(B) - SIN(A)SIN(B)
╫E WILL ALSO USE THE FACT THAT COSINE IS EVEN AND SINE IS ODD, THAT IS
COS(-A) = COS(A)
SIN(-A) = -SIN(A)
╒SING THE ABOVE IDENTITIES IT IS EASY TO SEE THAT
SIN(A)SIN(B) = (COS(A-B) - COS(A+B))/2
COS(A)COS(B) = (COS(A+B) + COS(A-B))/2
SIN(A)COS(B) = (SIN(A+B) + SIN(A-B))/2
╫E ARE GOING TO ROTATE FIRST AROUND THE Z-AXIS BY AN AMOUNT SZ, THEN THE
Y-AXIS BY AN AMOUNT SY, THEN THE X-AXIS BY AN AMOUNT SX. ╫HY ROTATE IN THAT
ORDER? ╫HY NOT.
═ = ╪┘┌
╔F YOU MULTIPLY EVERYTHING OUT (AND ╔ ENCOURAGE YOU TO DO SO, NOT ONLY FOR
PRACTICE, BUT ALSO AS A DOUBLE-CHECK OF MY WORK), AND USE THE ABOVE TRIG
IDENTITIES, THE RESULT IS:
[┴ ┬ ├]
═ = [─ ┼ ╞]
[╟ ╚ ╔]
╫HERE
┴ = (COS(T1)+COS(T2))/2
┬ = (SIN(T1)-SIN(T2))/2
├ = SIN(SY)
─ = (SIN(T3)-SIN(T4))/2 + (COS(T6)-COS(T5)+COS(T8)-COS(T7))/4
┼ = (COS(T3)+COS(T4))/2 + (SIN(T5)-SIN(T6)-SIN(T7)-SIN(T8))/4
╞ = (SIN(T9)-SIN(T10))/2
╟ = (COS(T4)-COS(T3))/2 + (SIN(T6)-SIN(T5)-SIN(T8)-SIN(T7))/4
╚ = (SIN(T3)+SIN(T4))/2 + (COS(T6)-COS(T5)+COS(T7)-COS(T8))/4
╔ = (COS(T9)+COS(T10))/2
WITH
T1 = SY-SZ
T2 = SY+SZ
T3 = SX+SZ
T4 = SX-SZ
T5 = SX+SY+SZ = SX+T2
T6 = SX-SY+SZ = SX-T1
T7 = SX+SY-SZ = SX+T1
T8 = SY+SZ-SX = T2-SX
T9 = SY-SX
T10= SY+SX
╚OW IS THIS SUPPOSED TO BE THE "SIMPLIFIED" VERSION? ╔F YOU LOOK CLOSELY,
THERE ARE NO MULTIPLIES. ╫E CAN CALCULATE THE ENTIRE ROTATION MATRIX ═ IN
ABOUT THE SAME TIME AS IT WOULD TAKE TO DO TWO MULTIPLICATIONS. ╘HIS ALSO
MEANS THAT THE ASSOCIATED PROBLEM WITH MULTIPLICATIONS, LOSS OF ACCURACY, IS
NOW GONE.
╚ERE IS ALSO WHERE WE NEED TO BE EXTREMELY CAREFUL. ╘HE FIRST ENTRY IN THE
MATRIX ═ IS THE EXAMPLE ╔ GAVE EARLIER ABOUT EVALUATING SIGNED NUMBERS. ╚OW
DO WE OVERCOME THIS?
┼ASY! ╬OTICE IN THE MATRIX ═ THAT, APART FROM ELEMENT ├, EVERY TERM IS A
SINE OR A COSINE DIVIDED BY TWO. ╘HIS IS THE ONLY PART OF THE PROGRAM WHICH
USES SINES AND COSINES, SO WHY NOT USE THE OFFSET FLOATING-POINT VALUES
DIVIDED BY TWO? ╘HIS WILL MAKE MORE SENSE IN A MINUTE.
╘HE QUESTION ARISES: THE ABOVE IS ALL WELL AND GOOD, BUT HOW DO WE TAKE THE
SINE OF A NUMBER AND MAKE IT FAST? ╘HE ANSWER OF COURSE IS TO USE A TABLE.
╫E USED A ┬┴╙╔├ ROUTINE TO CALCULATE THE TABLE FOR US (AND TO STORE THE
NUMBERS IN TWO'S-COMPLEMENT FORM). ├ALCULATE THE SINE AND COSINE OF EVERY
ANGLE YOU WANT AHEAD OF TIME, AND THEN JUST LOOK UP THE NUMBER.
╘HE TABLES CONTAIN THE VALUES OF SINE AND COSINE MULTIPLIED BY 64 (OUR
FLOATING-POINT OFFSET) AND THEN DIVIDED BY 2. ╙INCE THE VALUE IS ALREADY
DIVIDED BY TWO, THE ABOVE CALCULATION BECOMES AT THE SAME TIME FASTER AND
SAFER: FASTER BECAUSE ╔ DON'T HAVE TO KEEP DIVIDING BY TWO, AND SAFER
BECAUSE ╔ DON'T HAVE TO WORRY SO MUCH ABOUT OVERFLOW. (╔T CAN STILL HAPPEN,
BUT IT WON'T IF YOU'RE CAREFUL).
╚ERE IS AN EXAMPLE OF HOW TO CALCULATE ELEMENTS ┴ AND ┬ ABOVE:
╠─┴ SY
╙┼├
╙┬├ SZ
...
╙╘┴ T1 ;T1=SY-SZ
╠─┴ SY
├╠├
┴─├ SZ
...
╙╘┴ T2 ;T2=SY+SZ
...
╠─╪ T1
╠─┴ ├╧╙,T1 ;├╧╙ IS A TABLE OF COSINES*OFFSET/2
╠─╪ T2
├╠├
┴─├ ├╧╙,T2
╙╘┴ ┴ ;┴=(COS(T1)+COS(T2))/2
╠─╪ T1
╠─┴ ╙╔╬,T1
╠─╪ T2
╙┼├
╙┬├ ╙╔╬,T2
╙╘┴ ┬ ;┬=(SIN(T1)-SIN(T2))/2
... ;╥ESULT IS OFFSET BY A CERTAIN AMOUNT
╬OTE THAT THE ELEMENTS ─ ┼ ╟ AND ╚ INVOLVE A DIVISION BY FOUR, WHICH MEANS
THAT THE CODE DOES NEED TO PERFORM A DIVISION BY TWO DURING THE CALCULATION
OF THOSE ELEMENTS.
╘HAT'S ALL THERE IS TO CALCULATING THE ROTATION MATRIX. ╬EXT WE HAVE TO
ACTUALLY ROTATE THE POINTS. ╫E HAVE ANOTHER DECISION TO MAKE: DO WE TAKE
THE ROTATED OBJECT AND ROTATE IT BY A LITTLE AMOUNT, OR DO WE TAKE THE
ORIGINAL OBJECT AND ROTATE IT BY A BIG AMOUNT? ┬ECAUSE OF THE WAY WE HAVE
SET THINGS UP, THE ANSWER IS CLEAR: WE WANT TO INCREMENT THE ANGLE AT EACH
STEP, AND ROTATE THE ORIGINAL OBJECT BY THIS LARGE ANGLE (BESIDES,
GEOMETRICALLY YOU CAN SEE THAT IT WILL LOOK MUCH NICER THIS WAY).
╞OR A CUBE THIS IS EASY. ╘HE POINTS ARE ╨1=[1 1 1] ╨2=[1 -1 1]
╨3=[-1 -1 1] ╨4=[-1 1 1] ╨5=[1 1 -1] ╨6=[1 -1 -1] ╨7=[-1 -1 -1] ╨8=[-1 1 -1].
╘HIS MEANS THAT THE ROTATIONS ARE JUST A SERIES OF ADDITIONS AND/OR
SUBTRACTIONS OF ┴,┬,├,...,╔! ╘HE CODE IMPLEMENTS THIS IN A FUNNY WAY,
PARTLY TO MAKE THESE PROCEDURES EASY TO SEE, BUT MOSTLY TO MAKE DEBUGGING
THE CODE MUCH EASIER. ╔T IS MUCH FASTER TO DO EACH ROTATION SEPARATELY,
I.E.
:╨1 ╠─┴ ┴
┴─├ ┬
┴─├ ├
╙╘┴ ╨1.╪
...
:╨2 ╠─┴ ┴
╙┬├ ┬
┴─├ ├
╙╘┴ ╨2.╪
...
:╨3 ╠─┴ ├
╙┬├ ┴
╙┬├ ┬
╙╘┴ ╨3.╪
┘OU GET THE IDEA. ╧F COURSE, THE CODE NEEDS TO REMEMBER THAT IT IS DEALING
WITH SIGNED NUMBERS, AND TO WATCH CARRY FLAGS CAREFULLY (SOMETHING THE ABOVE
FRAGMENT DOES NOT DO).
╙TILL WORRIED ABOUT OVERFLOW? ╔F YOU THINK ABOUT IT GEOMETRICALLY, YOU WILL
SEE THAT THE MAXIMUM VALUE ANY PART OF A ROTATED COORDINATE CAN HAVE IS
SQRT(3). ╙INCE WE HAVE OFFSET OUR NUMBERS BY 64, THIS MEANS THAT, FOR
INSTANCE, THE MAXIMUM POSSIBLE VALUE FOR ┴+┬+├ IS 64*SQRT(3) WHICH IS ABOUT
111 -- IN RANGE OF A SIGNED 8-BIT NUMBER WITH A LITTLE CUSHION FOR
ADDITIONS. ╔N OTHER WORDS, WE OUGHT TO BE SAFE FROM OVERFLOW.
╙O FAR WE HAVE MANAGED TO ROTATE ALL THE COORDINATES -- A COMPLICATED SERIES
OF MATRIX OPERATIONS INVOLVING TRIGONOMETRIC FUNCTIONS -- BY JUST USING A
BUNCH OF ADDITIONS AND A BUNCH OF TABLE LOOKUPS! ╬OT TOO BAD! ╬OW WE JUST
NEED TO PROJECT THE POINT.
╔MPLEMENTATION: ╨ROJECTIONS
---------------------------
╥ECALL THAT THE PROJECTION EQUATION IS
X' = D*X/(Z-Z0)
Y' = D*Y/(Z-Z0)
╔T LOOKS AS IF WE HAVE GONE FROM A BUNCH OF SNEAKY ADDITIONS TO
MULTIPLICATIONS AND DIVISIONS! ┘UCK.
╫ELL, WAIT A MINUTE, MAYBE WE CAN DO SOMETHING. ╚OW ABOUT USING A TABLE FOR
1/(Z-Z0), AND THEN JUST USE A MULTIPLY? ╧H YEAH, THAT'S A REALLY SMALL
NUMBER. ┴S LONG AS WE'RE USING A TABLE, WHY NOT INCORPORATE THE D INTO IT?
├OME TO THINK OF IT, IF THE NUMBER WEREN'T MULTIPLIED BY THE OFFSET 64 IT
WOULD BE A PRETTY REASONABLE NUMBER!
╙O, WHAT WE WANT TO DO IS TO CONSTRUCT A TABLE OF NUMBERS SUCH THAT WHEN THE
PROGRAM CALLS
╠─╪ Z
╠─┴ TABLE,Z
IT GETS THE ABSOLUTE (I.E. NON-OFFSET) VALUE ┴=D/(Z-Z0). ╫HAT IF WE WANT TO
CHANGE D? ┘OU COULD PUT A LITTLE PIECE OF CODE INTO YOUR PROGRAM WHICH
MULTIPLIES BY A NUMBER LESS THAN ONE, AND LET D REPRESENT THE MAXIMUM VALUE
FOR D WHICH MAKES THE CODE WORK. ┬UT FOR THE MOMENT WE WON'T BOTHER WITH
THAT -- ONE THING AT A TIME!
╙INCE Z IS A SIGNED NUMBER, WE OUGHT TO ADD 128 TO IT TO CONVERT IT INTO AN
INDEX. ─OES THIS HAVE ANY MEANING IN TWO'S-COMPLEMENT ARITHMETIC? ┘UP. ╫E
ALSO NEED TO REMEMBER THAT FLOATS ARE OFFSET BY 64, AND THAT THE HIGHEST
VALUE A SIGNED NUMBER CAN HAVE IS 127.
╚ERE IS HOW THE TABLE IS GENERATED:
10 BZ=WHATEVER
20 D=45:Z0=3:Z=-128:DZ=1
30 FOR I=0 TO 255
40 Q%=64*D/(64*Z0-Z):IF Q%>127 THEN Q%=127
50 POKE BZ+I,Q%:Z=Z+DZ
60 NEXT
╬OTE THAT THE OFFSET CHOSEN FORCES Q% TO ALWAYS BE POSITIVE. ╘HIS FACT CAN
BE MADE USE OF IN THE MULTIPLICATION ROUTINE (BUT ISN'T IN THE SOURCE CODE).
┘OU MAY HAVE NOTICED THAT Z0-Z IS USED, AND NOT Z-Z0 LIKE IN THE PROJECTION
EQUATION. ╔F YOU PUT ON YOUR GEOMETRIC THINKING CAP FOR A MOMENT, YOU WILL
REALIZE THAT THE WAY THE PROJECTION EQUATIONS WERE SET UP CAUSES THE IMAGE
TO BECOME INVERTED. ╘O UNINVERT IT, WE NEED TO MULTIPLY BY NEGATIVE ONE.
╙O WE JUST ADD THAT STEP INTO THE TABLE.
┬UT WE STILL NEED TO DO A MULTIPLICATION!
╞AST ╙IGNED 8-BIT ═ULTIPLY
--------------------------
┴ BINARY NUMBER LOOKS LIKE THE FOLLOWING:
╨ = 1*128 + 0*64 + 0*32 + 1*16 + 1*8 + 0*4 + 0*2 + 0*1
╘HEREFORE, IF WE WANT TO MULTIPLY ╨ BY ANOTHER NUMBER, 13 SAY, WE FIND THAT
13*╨ = 13*128 + 0*64 + 0*32 + 13*16 + ...
THAT IS TO SAY, IF THERE IS A ONE IN BIT POSITION ╬, THEN THE NEW NUMBER
WILL HAVE 13*2^╬ IN IT. ╙O, TO MULTIPLY TWO NUMBERS WE FIND OUT WHAT BIT
POSITIONS ARE HIGH, AND THEN ADD THE OTHER NUMBER*2^╬ TO THE RESULT. ╘HIS
DOESN'T SEEM TOO FAST. ╚ERE IS A TRICK: WE CAN WRITE 2^╬ AS 256/2^(8-╬).
╙O, LET'S SAY WE WANT TO MULTIPLY THE NUMBER ╨ BY THE NUMBER ╥. ╔F ╨ HAS A
HIGH BIT IN POSITION ╬, WE CAN START OUT WITH 256*╥, AND BIT-SHIFT IT TO THE
RIGHT 8-╬ TIMES. ╫HY IN THE WORLD WOULD WE DO THIS? ┬ECAUSE WE CAN
_PIPELINE_ THE PROCESS IN A WAY SOMEWHAT SIMILAR TO THE WAY A ├RAY
SUPERCOMPUTER MULTIPLIES TWO VECTORS TOGETHER -- YES, ╔'M COMPARING YOUR
├-64 TO A ├RAY! ╫ATCH:
*
* 8-BIT MULTIPLY -> 16-BIT RESULT
*
* ┴├├*┴╒╪ -> [┴╒╪,┼╪╘] LO,HI
═╒╠╘ ╠─┴ #$00
╠─┘ #$09
]╠╧╧╨ ╠╙╥
╥╧╥ ┴├├
┬├├ ═╒╠╘2
├╠├
┴─├ ┴╒╪
═╒╠╘2 ─┼┘
┬╬┼ ]╠╧╧╨
╙╘┴ ┼╪╘
╨RETTY SLICK. ╬OW WE NEED TO MODIFY IT FOR SIGNED NUMBERS. ┴LL WE NEED TO
DO IS CHECK TO SEE IF THE RESULT IS POSITIVE OR NEGATIVE. ╔F IT'S POSITIVE,
WE CHECK ONE NUMBER (THEY ARE EITHER BOTH POSITIVE OR BOTH NEGATIVE), AND IF
IT'S NEGATIVE WE FIX THEM BOTH TO BE POSITIVE, AND USE THE ABOVE PROCESS.
╔F THE RESULT IS GOING TO BE NEGATIVE, WE NEED TO FIND THE NEGATIVE NUMBER,
MAKE IT POSITIVE, MULTIPLY THE TWO NUMBERS TOGETHER, AND MAKE THE FINAL
RESULT NEGATIVE (TAKE THE TWO'S-COMPLEMENT OF THE RESULT).
╙EE THE SOURCE CODE FOR AN IMPLEMENTATION OF THIS.
╬OTE THAT WE COULD DO A DIVIDE IN A SIMILAR FASHION, EXCEPT SHIFTING LEFT
INSTEAD OF RIGHT. ╙INCE WE DON'T NEED A DIVIDE ROUTINE FOR OUR CALCULATIONS
WE DON'T NEED TO WORRY ABOUT THIS.
╬OW WE HAVE ALL THE TOOLS WE NEED TO IMPLEMENT THE MATHEMATICS. ╘HERE IS
STILL ONE PART OF THE PROGRAM LEFT: DRAWING THE THING!
─RAWING A LINE
--------------
╘HE GEOMETRIC IDEA IS: GIVEN AN INITIAL POINT [X1 Y1], WE WANT TO DRAW A
LINE TO THE POINT [X2 Y2]! ╬OW WE WANT TO DO THIS ON A COMPUTER BY TAKING
ONE STEP AT A TIME, FROM POINT TO POINT. ╘HE IDEA IS TO MAKE IT FAST, AND
SINCE WE'RE ON A ├64 THERE AREN'T ANY ═╒╠ OR ─╔╓ INSTRUCTIONS.
╘O DO THIS, WE FIRST NEED TO FIND OUT WHICH IS LARGER:
DX = ▄X2-X1▄
DY = ▄Y2-Y1▄
WHERE ▄ ▄ DENOTES ABSOLUTE VALUE. ╠ET'S ASSUME THAT IT IS DX, AND THAT THE
VARIABLE X IS GOING TO RUN FROM X1 TO X2. ╘HEREFORE, WE WANT TO INCREASE X
BY ONE AT EACH STEP, AND WE WANT TO INCREASE Y BY SOME FRACTIONAL AMOUNT (╔F
DY WERE LARGER WE WOULD WANT TO TAKE BIG STEPS IN THE Y-DIRECTION). ┬UT WE
DON'T WANT TO CALCULATE THIS FRACTIONAL NUMBER. ╫E DO, HOWEVER, WANT TO
TAKE A CERTAIN AMOUNT OF STEPS IN THE X-DIRECTION BEFORE TAKING A STEP IN
THE Y-DIRECTION.
╔F WE TAKE K STEPS IN X BEFORE TAKING A STEP IN Y, THEN WE WANT TO CHOSE K
SUCH THAT
DX/K = DY
WHICH GIVES
K = DX/DY
WHERE DX AND DY ARE AS ABOVE, THE TOTAL NUMBER OF STEPS TO BE TAKEN IN THE
X- AND Y-DIRECTIONS RESPECTIVELY. ╫HAT IS DX/DY? ╫E DON'T CARE. ╔NSTEAD,
EVERY TIME WE STEP IN X, WE NEED TO INCREASE A COUNTER BY THE AMOUNT DY. ┴S
SOON AS THIS COUNTER IS LARGER THAN DX, WE HAVE SUCCESSFULLY DIVIDED DY INTO
DX, AND SO SIMPLY RESET THE COUNTER (IN A SPECIAL WAY, SO THAT WE KEEP ANY
REMAINDER FROM THE DIVISION) AND TAKE A STEP IN Y.
╧F COURSE, IF DY WERE LARGER THAN DX, THE IDEA WOULD BE THE SAME, BUT NOW K
= DY/DX. K IS NEVER SMALLER THAN ONE.
╔N THE CODE FRAGMENT WHICH FOLLOWS IT IS ASSUMED THAT X2>X1, Y2>Y1, AND
DX>DY. ╧BVIOUSLY, THEN, ANY SELF-RESPECTING LINE DRAWING ROUTINE NEEDS TO
HANDLE ALL OF THESE CASES. ╧NE WAY IS TO HAVE EIGHT DIFFERENT ROUTINES, ONE
FOR EACH CASE. ┴NOTHER WAY (THE WAY USED BY THE PROGRAM), IS TO FORCE
X2>X1, SO THAT THERE ARE ONLY FOUR CASES TO DEAL WITH. ╞OR THE PLOTTING
ROUTINE WHICH WE USE, THIS TURNS OUT TO BE NECESSARY. ╔F YOU THINK ABOUT
IT, YOU CAN COME UP WITH SOME MORE CLEVER WAYS TO DEAL WITH THIS.
╬OTE THAT YOU ALSO NEED TO FIGURE OUT WHAT COLUMN THE FIRST POINT IS IN:
THIS ALGORITHM KNOWS HOW TO WALK FORWARDS, BUT IT DOESN'T KNOW WHERE IT
SHOULD START.
╘HE CODE IS NEXT TO SOME SIMILAR ┬┴╙╔├7.0 CODE TO MAKE IT EASIER TO
UNDERSTAND.
╘HE CODE CAN BE SPED UP IN A LOT OF WAYS. ╞OR ONE THING IT COULD BE MADE
SELF-MODIFYING. ┴LL VARIABLES COULD BE STORED IN ZERO PAGE. ╔N FACT, THE
ENTIRE ROUTINE COULD BE STORED IN ZERO PAGE! ┴LSO, WITH A LITTLE CHANGE IN
THE LOGIC (AND A SUBSEQUENT CHANGE IN THE PLOTTING ROUTINE) YOU CAN
ELIMINATE THE BRANCHING INSTRUCTION. ╞OR THE SAKE OF CLARITY WE DON'T DO
THAT HERE; MAYBE IN ANOTHER PAPER ;-).
┴LSO NOTE THAT THE LARGEST VALUE X CAN TAKE ON IN THIS ROUTINE IS 255. ╞OR
THE WAY WE ARE GOING TO PLOT THINGS, THIS WON'T MATTER. ┬UT A MORE GENERAL
ROUTINE NEEDS A WAY TO OVERCOME THIS. ╧NE WAY WOULD BE TO DRAW TWO SEPARATE
LINES.
10 ╥┼═ ┴LL OF THE ABOVE COMMENTS ;-)
20 ╥┼═ ╔NPUT X1,X2,Y1,Y2
30 ╟╥┴╨╚╔├1,1:─╥┴╫1,X1,Y1:─╥┴╫1,X2,Y2
31 :╥┼═ ABOVE IS A DOUBLE-CHECK ;─RAWIN' A LINE
39 ╥┼═ ╙ET UP VARIABLES ;V1.3 ╙╠╩ 7/2/94
40 ─╪ = ╪2-╪1 ╠─┴ $(╪2) ;╪2 IN ZERO PAGE
╙┬├ $(╪1)
╙╘┴ ─╪ ;╞OR SPEED, STORE
50 ─┘ = ┘2-┘1 ╠─┴ $(┘2) ;DIRECTLY INTO CODE
╙┬├ $(┘1) ;BELOW
╙╘┘ ─┘
60 ╪=╪1:┘=┘1 ╠─╪ $(╪1) ;╨LOTTING COORDINATES
╠─┘ $(┘1) ;IN ╪ AND ┘
64 ╥┼═ ┴ COUNTS STEPS IN X
65 ╥┼═ ┬ELOW YOU MIGHT WANT TO
66 ╥┼═ CHANGE TO ┴=1 OR ┴=─┘
67 ╥┼═ ╧THERWISE THE LINE ALWAYS
68 ╥┼═ TAKES ONLY ONE STEP IN Y
69 ╥┼═ BEFORE THE LAST POINT (X=X2-1)
70 ┴=256-─╪:╥┼═ ┴=0 ╠─┴ #00 ;╙AVES US A ├═╨
╙┼├
╙┬├ ─╪
80 ─╥┴╫1,╪,┘ ╨╨╠╧╘ ;═YSTERY PLOTTER
90 ╥┼═ ═AIN ROUTINE ├╠├
100 ╪=╪+1 ╠╧╧╨ ╔╬╪ ;╙TEP IN X
110 ┴=┴+─┘ ┴─├ ─┘ ;┴DD ─┘
120 ╔╞ ┴>=256 ╘╚┼╬ ┘=┘+1:┴=┴-─╪ ┬├├ ╬╧╨┼ ;╘IME TO STEP IN Y?
121 ╥┼═ ╔╞ ┴>=─╪ ╘╚┼╬... ╔╬┘ ;╙TEP IN Y
╙┬├ ─╪ ;╥ESET COUNTER
130 ─╥┴╫1,╪,┘ ╬╧╨┼ ╨╨╠╧╘ ;╨LOT THE POINT
140 ╔╞ ╪<>╪2 ╘╚┼╬ ╟╧╘╧ 100 ├╨╪ ╪2 ;┴T THE ENDPOINT YET?
┬╬┼ ╠╧╧╨
150 ╨╥╔╬╘"┴LL DONE!":╥┼═ ┘AY!
├YCLE COUNT:
╠╧╧╨: 2 3 2 2 3 3 3 = 18
(WORST CASE)
+ DX ╨╨╠╧╘S (ONE FOR EACH POINT)
╘HE POINT HERE IS THAT IT'S FAST. ╔F YOU USE SELF-MODIFYING CODE, YOU CAN
GET THIS DOWN TO 15 CYCLES PER POINT. ╔F YOU ARE CLEVER, YOU CAN GET IT
DOWN TO 13 CYCLES PER POINT, EXCLUDING PLOT, WORST CASE. ╬OT TOO BAD! ╫E
WON'T BE CLEVER RIGHT NOW, BUT MAYBE YOU'LL GET TO SEE IT LATER...
╬OTE ALSO THAT THIS COULD EASILY BE USED IN A ┬┴╙╔├ PROGRAM; EVEN A ┬┴╙╔├2.0
PROGRAM. (╔F YOU WOULD LIKE THE ─┴╘┴ STATEMENTS TO DO THIS JUST DROP US A
LINE, ER... CONTACT US).
╬OW, THIS ROUTINE WORKS FINE, BUT FOR DRAWING A LINE ON A COMPUTER IT
DOESN'T ALWAYS LOOK GREAT. ╞OR INSTANCE, WHAT HAPPENS IF WE DRAW A POINT
FROM 1,1 TO 11,3? K=DX/DY=5, SO SE WILL TAKE FIVE STEPS IN X AND THEN A
STEP IN Y, THEN FIVE MORE STEPS AND... A STEP IN Y AT THE VERY LAST POINT!
╙O OUR LINE DOESN'T LOOK SO GOOD -- WE HAVE A LITTLE SQUARE EDGE AT THE
ENDPOINT.
╧NE WAY TO FIX THIS IS TO TRICK THE COMPUTER INTO THINKING IT NEEDS TO TAKE
AN EXTRA STEP IN Y BY LETTING K=DX/(DY+1), AND BEING CAREFUL IN KEEPING
TRACK OF OUR COUNTER. ╘HE BIG PROBLEM WITH THIS METHOD IS THAT IT PRODUCES
THE SQUARE END-PIXELS WHEN DX AND DY ARE NEARLY THE SAME (SLOPE ▐= 1).
┴ BETTER WAY TO FIX THIS IS TO INITIALIZE THE COUNTER NOT TO 0 (IN OUR CASE,
256-DX), BUT INSTEAD TO ─╪/2 (256-─╪/2 IN OUR CASE). ╘HIS HAS THE EFFECT OF
SPLITTING ONE OF THE LINE SEGMENTS BETWEEN THE TWO ENDPOINTS, AND LOOKS GOOD
FOR ALL SLOPES. ╘HIS IS WHAT THE PROGRAM DOES. ╔N FACT, AS FAR AS ╔ CAN
TELL, THIS IS WHAT ┬┴╙╔├7.0 DOES TOO!
╘HERE IS STILL A PART OF OUR ROUTINE MISSING, HOWEVER...